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

C#与JavaScript中UTF-8编码错误字符串修复咨询

修复UTF-8乱码(Adrián José → Adrián José)的解决方案

问题本质

这个乱码是典型的编码二次错误:原本的UTF-8字节序列(对应Adrián José)被错误地用单字节编码(如Windows-1252/ISO-8859-1)解码成了字符串,现在需要反向操作还原正确内容。


C# 解决方案

你之前的代码颠倒了编码转换逻辑,正确步骤是先将乱码字符串还原为被错误解码的原始字节,再用UTF-8解码:

var badString = "Adrián José";
// 用Windows-1252编码(对应Notepad++里的"ANSI")将乱码转成字节数组
byte[] misinterpretedBytes = Encoding.GetEncoding(1252).GetBytes(badString);
// 用UTF-8解码字节数组,得到正确字符串
string fixedString = Encoding.UTF8.GetString(misinterpretedBytes);
// 输出结果:Adrián José

无效原因说明

你原本尝试用UTF-8获取乱码的字节,相当于对已错误解码的字符串再次做UTF-8编码,完全偏离了还原原始字节的逻辑。正确思路是通过单字节编码(Windows-1252)把乱码还原成最初的UTF-8字节,再解码。


JavaScript 解决方案(无需escape())

使用标准TextEncoder/TextDecoderAPI替代escape()方案:

const badString = "Adrián José";
// 用Latin1(ISO-8859-1)编码将乱码转成Uint8Array(与Windows-1252兼容度极高)
const misinterpretedBytes = new TextEncoder('latin1').encode(badString);
// 用UTF-8解码字节数组
const fixedString = new TextDecoder('utf-8').decode(misinterpretedBytes);
// 输出结果:Adrián José

工具/Notepad++的修复原理

在线字符集修复工具和Notepad++的编码转换逻辑完全一致:

  1. 将乱码字符串按单字节编码(如Windows-1252/ISO-8859-1)转换为字节序列;
  2. 用UTF-8解码该字节序列,还原出正确的Unicode字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:20:17