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

如何将字符串中误解析的UTF-8/Unicode字符转换为正确字符?

这种UTF-8乱码我简直熟得不能再熟了!本质就是你的字符串被错误地用单字节编码(比如Latin-1/Windows-1252)解码了,原本的UTF-8多字节字符被拆成了几个奇怪的单字节字符——比如你例子里的’,其实就是正确撇号’的UTF-8字节被乱解出来的结果。直接给你两种场景的解决方案,拿来就能用:

核心修复逻辑

把乱码的字符串反向转换:先把乱码字符转回对应的单字节序列,再用UTF-8重新解码,就能还原出正确的字符。

场景1:只有纯乱码字符(比如’)

以JavaScript为例,直接用URI编码的技巧实现反向转换,代码简洁高效:

function fixUtf8MangledString(str) {
  // 先把字符串转成基于Latin-1的URI编码,再用UTF-8解码
  return decodeURIComponent(escape(str));
}

// 测试你的例子
const string = "This person’s something....";
const fixedstring = fixUtf8MangledString(string);
console.log(fixedstring); // 输出:This person's something....

如果是Python,逻辑更直接:

def fix_utf8_mangled_string(s):
    # 用Latin-1编码把字符串转回字节,再用UTF-8解码
    return s.encode('latin-1').decode('utf-8')

# 测试
string = "This person’s something...."
fixedstring = fix_utf8_mangled_string(string)
print(fixedstring)
场景2:同时存在HTML实体(比如’)

如果字符串里还有像â这种HTML实体编码,需要先把实体转成对应字符,再处理UTF-8乱码:

function fixMixedMangledString(str) {
  // 第一步:把十进制HTML实体转成字符
  const entityFixed = str.replace(/&#(\d+);/g, (_, decimalCode) => {
    return String.fromCharCode(decimalCode);
  });
  // 第二步:修复UTF-8乱码
  return decodeURIComponent(escape(entityFixed));
}

// 测试混合场景
const mixedString = "This person’s something....";
const fixedMixed = fixMixedMangledString(mixedString);
console.log(fixedMixed); // 输出:This person's something....
额外注意事项
  • 如果乱码是Windows-1252编码导致的(比如一些特殊符号),可以把代码里的latin-1换成cp1252(Python)或者调整对应的编码转换逻辑;
  • 这种方法对绝大多数常见的UTF-8乱码场景都有效,比如引号、破折号、版权符号等的乱码都能修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:42:44