Unicode转字符串?几行代码就搞定,别再被乱码卡住了

你是不是也遇到过这样的情况:从网页抓了一段文字,或者读取了一个 JSON 文件,结果控制台里显示一堆类似 \u4f60\u597d 的东西?复制到编辑器里一看,全是方块或问号——这不是 bug,是 Unicode 编码没正确转成可读的中文。

Unicode 转字符串,到底在转什么?

简单说,\u4f60 是 Unicode 码点的转义写法,对应汉字“你”。它不是乱码,只是还没“解码”成我们看得懂的样子。就像快递单号要扫码才能查物流,Unicode 转义序列也要经过处理,才能变成真实字符。

常见场景,随手就能试

比如你在浏览器控制台看到:

"\u4f60\u597d\uff0c\u4eca\u5929\u5403\u4e86\u4ec0\u4e48\uff1f"
这其实是:“你好,今天吃了什么?”——但得让它“活”过来。

Python 里最省事的方法

直接用 .encode().decode('unicode_escape')

s = "\\u4f60\\u597d\\uff0c\\u4eca\\u5929\\u5403\\u4e86\\u4ec0\\u4e48\\uff1f"
result = s.encode().decode('unicode_escape')
print(result) # 输出:你好,今天吃了什么?

注意:如果原始字符串里反斜杠是单个(比如从文件或 API 直接读出来的),就不用额外加双反斜杠,直接 s.decode('unicode_escape') 即可。

JavaScript 怎么办?

浏览器环境可以直接用 JSON.parse 偷个懒(前提是格式合规):

const str = '"\\u4f60\\u597d\\uff0c\\u4eca\\u5929\\u5403\\u4e86\\u4ec0\\u4e48\\uff1f"';
const decoded = JSON.parse(str);
console.log(decoded); // 你好,今天吃了什么?

或者更通用的写法:

function unicodeToChar(str) {
return str.replace(/\\u[\da-fA-F]{4}/g, function(match) {
return String.fromCharCode(parseInt(match.slice(2), 16));
});
}
unicodeToChar('\\u4f60\\u597d'); // '你好'

顺手避个坑

有时候你看到的是 \U0001F600(带大写 U 和 8 位数字),这是 Unicode 补充平面字符,比如 😄。Python 里要用 surrogatepass 或直接用 encode('utf-16', 'surrogatepass').decode('utf-16', 'surrogatepass'),但多数日常情况用不到——普通表情和中文,四位 \u 就够了。

下次再看到一串 \u 开头的字符,别急着截图发群问“这是啥”,打开编辑器敲两行,秒变人话。