如何在C#中将â„¢转换回™特殊字符
问题:将乱码字符
â„¢转换回™的C#解决方案 从外部数据源获取数据时,发现特殊字符™被转换为了â„¢,这是编码错误导致的。尝试了多种编码转换代码,但都无法得到目标字符:
byte[] bytes1 = Encoding.Unicode.GetBytes("â„¢"); String str1 = Encoding.Unicode.GetString(bytes1); String str2 = Encoding.UTF8.GetString(bytes1); string str3 = Encoding.UTF32.GetString(bytes1); var bytes2 = Encoding.Default.GetBytes("â„¢"); var str4 = Encoding.UTF8.GetString(bytes2); var str5 = Encoding.UTF32.GetString(bytes2); var str6 = Encoding.Unicode.GetString(bytes2); byte[] bytes3 = Encoding.UTF8.GetBytes("â„¢"); String str7 = Encoding.Unicode.GetString(bytes3); String str8 = Encoding.UTF8.GetString(bytes3); string str9 = Encoding.UTF32.GetString(bytes3); byte[] bytes4 = Encoding.UTF32.GetBytes("â„¢"); String str10 = Encoding.Unicode.GetString(bytes4); String str11 = Encoding.UTF8.GetString(bytes4); string str12 = Encoding.UTF32.GetString(bytes4);
解决方案
问题根源
这是典型的UTF-8字节被错误地用单字节编码(如Windows-1252)解码导致的乱码:
™的UTF-8编码是三个字节:0xE2 0x84 0xA2- 当用Windows-1252解码这三个字节时,会分别得到
â(0xE2)、„(0x84)、¢(0xA2),也就是你看到的â„¢。
正确的转换代码
要还原正确字符,需要先将乱码字符串用错误解码时使用的编码转回字节数组,再用UTF-8解码这些字节:
string messedUpStr = "â„¢"; // 用Windows-1252编码将乱码转回原始UTF-8字节 byte[] originalUtf8Bytes = Encoding.GetEncoding(1252).GetBytes(messedUpStr); // 用UTF-8解码得到正确字符 string correctStr = Encoding.UTF8.GetString(originalUtf8Bytes); // 输出结果:™ Console.WriteLine(correctStr);
为什么之前的代码无效
你之前的尝试都是直接对乱码字符串进行编码转换,没有还原到最初的UTF-8字节流。核心是要找到数据源错误解码时使用的编码——多数情况下是Windows-1252(对应编码ID 1252),如果这个编码不行,可以尝试其他单字节编码(如ISO-8859-1)。
内容的提问来源于stack exchange,提问作者J.Cart
相关产品推荐
相关产品推荐

