特殊字符无法转换为UTF-8,Windows-1252转码无效如何解决
问题本质
出现乱码属于典型的UTF-8字节流被错误用Windows-1252解码的场景:
- 符号
°的UTF-8编码为0xC2 0xB0,当这段字节流被错误使用Windows-1252编码解码时,0xC2会被解析为字符Â,0xB0会被解析为°,最终就生成了°的乱码组合。 - 原有代码逻辑完全错误:将已经乱码的字符串再次用Windows-1252转字节后执行编码转换,相当于给错误内容叠加了额外编码操作,无法得到正常结果。
修复代码
不需要调用Encoding.Convert,直接把乱码字符串用Windows-1252转回原始字节流,再用UTF-8解码即可:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Encoding w1252 = Encoding.GetEncoding(1252); // 乱码字符串转回原始字节流 byte[] originalBytes = w1252.GetBytes(htmlNormalized); // 用UTF-8直接解码原始字节流 htmlNormalized = Encoding.UTF8.GetString(originalBytes);
编码修正完成后,如果需要输出为你期望的数值序列格式,可额外提取字符串中的数值,再按要求重新拼接即可。
内容的提问来源于stack exchange,提问作者user2741438
相关产品推荐
相关产品推荐

