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

C#如何将已转码的UTF-8字符串转换为UTF-16?

解决UTF-8乱码还原为正确Unicode字符串的问题

你的问题本质是:原UTF-8编码的字节被错误地用单字节编码(比如Windows-1252或ISO-8859-1)解析成了字符串,才出现Não é possível equipar这类乱码。你原代码的逻辑错误在于,直接对乱码字符串取UTF-8字节再转UTF-16,相当于在错误的基础上重复错误操作,自然得不到正确结果。

正确的处理步骤应该是逆向还原:

  • 先把乱码字符串转回原UTF-8字节数组(用当初错误解析时的单字节编码)
  • 再用UTF-8编码解析这些字节,得到正确的Unicode字符串

修正后的C#代码如下:

static void Main(string[] args)
{
    test3();
    Console.ReadKey();
}

static void test3()
{
    string garbledStr = "Não é possível equipar";
    string correctedStr = FixGarbledUtf8(garbledStr);

    Console.WriteLine(garbledStr);
    Console.WriteLine(correctedStr); // 输出:Não é possível equipar
}

static string FixGarbledUtf8(string garbledString)
{
    // 用Windows-1252编码把乱码字符串转回原UTF-8字节(这是此类乱码最常见的根源编码)
    byte[] originalUtf8Bytes = Encoding.GetEncoding(1252).GetBytes(garbledString);
    // 用UTF-8解析字节得到正确的Unicode字符串
    return Encoding.UTF8.GetString(originalUtf8Bytes);
}

如果Windows-1252编码无法还原正确结果,可以尝试替换为ISO-8859-1编码(对应编码ID 28591),将代码中Encoding.GetEncoding(1252)改为Encoding.GetEncoding(28591)即可。

内容的提问来源于stack exchange,提问作者Falakienos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:27:19