You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:21