JSON中文显示为\u4f60\u597d是因UTF-8带BOM或编码误判导致内容被污染;应先Reopen with Encoding选UTF-8或UTF-8 with BOM还原原文,再Save with Encoding选utf8(无BOM),并关闭files.autoGuessEncoding以防错判。

JSON文件中文显示为\u4f60\u597d这类Unicode转义
这是典型的“保存时用了UTF-8,但文件开头带BOM”或“编辑器误判编码后反向转义”的表现。VSCode把原本正常的UTF-8中文,按错误编码(如ISO-8859-1)解码成乱码,再用JSON序列化逻辑自动转成\uXXXX形式写回——本质是**保存操作污染了原始内容**。
实操建议:
- 立刻停止保存,右下角点击编码名 → 选
Reopen with Encoding→ 尝试UTF-8 with BOM和UTF-8,哪个能还原出原始中文就选哪个 - 确认显示正常后,再次点击编码名 → 选
Save with Encoding→ 严格选utf8(全小写、无短横、无BOM) - 检查该JSON是否被其他工具(如Excel导出、旧版Notepad++)处理过:带BOM的UTF-8在Node.js/Python里读取会报
SyntaxError: Non-UTF-8 code starting with '\xff' - 若已出现\uXXXX,且原始中文不可见,可临时用在线工具“Unicode解码”,但仅限短文本;长文件建议从Git历史恢复
JSON配置文件里中文注释一保存就变乱码
标准JSON规范不支持注释,但VSCode和很多工具(如ESLint、Prettier)允许//或/* */注释。问题出在:这些注释里的中文,被编辑器用错误编码保存,或插件自身解析时未设process.stdout.setEncoding('utf8')。
实操建议:
- 确保文件本身以UTF-8无BOM保存:右下角点编码 →
Reopen with Encoding→utf8→ 再点 →Save with Encoding→utf8 - 在
settings.json中添加:"files.encoding": "utf8"和"files.autoGuessEncoding": false(开启autoGuessEncoding反而容易把含中文注释的JSON错判为GBK) - 避免在JSON里写中文注释;改用
.jsonc后缀(VSCode原生支持),并确认语言模式已识别为JSON with Comments - 若用i18n插件生成多语言JSON,检查其输出逻辑是否显式调用
fs.writeFileSync(path, content, { encoding: 'utf8' })
右下角编码显示utf8,但打开JSON仍乱码
说明VSCode当前用的是utf8解码,但文件实际不是UTF-8——常见于从Windows记事本直接另存为“UTF-8”的文件,它默认存的是UTF-8 with BOM;而VSCode的utf8配置默认不兼容BOM头,导致前三个字节\xef\xbb\xbf被当作文本内容解析。
实操建议:
- 右下角点编码 →
Reopen with Encoding→ 手动选UTF-8 with BOM,看是否恢复正常 - 若正常,立即
Save with Encoding→utf8(注意:这次是真正去掉BOM) - 检查
settings.json中是否有"files.autoGuessEncoding": true,关掉它——对JSON这类结构化文本,自动猜测常因BOM干扰失败 - Git用户注意:
git config --global core.autocrlf true在Windows上可能加剧BOM相关问题,可临时设为false测试
插件Output面板里JSON日志中文全是方块或空格
这不是文件编码问题,而是VSCode插件宿主进程(Extension Host)基于Node.js运行,默认未启用UTF-8模式。即使files.encoding设成utf8,对Output面板也完全无效。
实操建议:
- 在系统环境变量中设置:
NODE_OPTIONS=--experimental-utf8(Node.js ≥18.17)或NODE_OPTIONS=--no-warnings+ 手动在插件代码里加process.stdout.setEncoding('utf8') - 不要依赖
terminal.integrated.env.windows,那个只影响集成终端,不影响Extension Host - 验证方式:打开Output面板 → 切换到任意插件日志 → 输入中文字符 → 看是否显示为方块;若仍是方块,说明Node.js进程层未生效
- 临时绕过:在插件配置中关闭中文日志,或改用
console.error(JSON.stringify(obj, null, 2))手动序列化,避开编码链路
真正棘手的从来不是“怎么选编码”,而是哪些环节根本不受files.encoding控制——Output面板、插件UI渲染、Git路径、Node.js子进程,每个都得单独打补丁。


















