vscode中文乱码主因是编辑器读错、写错编码或终端未对齐,非文件损坏;应先右下角点utf-8→reopen with encoding→gbk验证真实编码(安全只改读法),确认后save with encoding→utf-8转码,禁用autoguessencoding并分层配置encoding,终端乱码需chcp 65001+pythonioencoding。

VSCode 里中文乱码不是文件坏了,而是编辑器读错了、写错了,或者终端根本没对上——全局替换配置不能一刀切,否则老项目 .bat 直接执行失败、Git 日志变 \u4f60\u597d、Python 报 SyntaxError 都是踩过坑的人说的。
右下角点 UTF-8 → Reopen with Encoding → GBK 是什么操作
这是验证文件真实编码最安全的动作,不改字节、只换读法。Windows 上用记事本保存的 .txt、.reg、.ini 多数是 GBK(即 CP931),VSCode 默认按 UTF-8 解码,必然显示方块或 \u4f60\u597d。
- 点击右下角状态栏的
UTF-8→ 选Reopen with Encoding→GBK,内容立刻恢复,说明原始编码就是 GBK - 如果更乱了,别按
Ctrl+Z(它不生效),直接关文件重开再试GB2312或Big5 - 千万别一上来就点
Save with Encoding:那是覆写文件,误选UTF-8 with BOM会导致 PythonImportError、Git 出现无意义 diff
settings.json 里怎么配才不踩坑
关键不是“加哪行”,而是“加在哪一层”和“加给谁”。全局硬设 "files.encoding": "utf8" 看似省事,实则埋雷。
- 新项目/协作开发:在用户级
settings.json加两行:"files.encoding": "utf8"和"files.autoGuessEncoding": false(关掉自动猜测,它对 GBK 基本必错) - 老项目混 GBK 文件:在工作区根目录的
.vscode/settings.json里配:"files.associations": {"*.txt": "gbk", "*.log": "gbk"},精准控制后缀,不影响其他类型 - 语言专属规则(如强制
.py用 UTF-8):用命令面板Preferences: Configure Language Specific Settings→ 选python→ 填"files.encoding": "utf8" - 注意:
"utf8"必须全小写;写成"UTF-8"或"UTF8",VSCode 直接忽略该设置
终端输出中文乱码必须分 Windows / WSL 处理
这不是编辑器问题,是 shell 层面的编码对不上。Python 按 UTF-8 输出,cmd/Powershell 默认用 GBK 接收,字就糊了。
- Windows 用户:在用户级
settings.json加这段,让终端启动时自动切到 UTF-8 页:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "/c", "chcp 65001"]
},
"Command Prompt": {
"path": "cmd.exe",
"args": ["/K", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}
- WSL 用户:别碰 Windows 终端设置,进子系统改
locale(比如sudo locale-gen zh_CN.UTF-8+export LANG=zh_CN.UTF-8),VS Code 终端会自动继承 - 临时救急:终端里手动输
chcp 65001(Windows)或export PYTHONIOENCODING=utf8(Linux/macOS)
Git 提交日志中文变 \u4f60\u597d 怎么办
Git 自身把 commit message 当 ASCII 处理,遇到中文就转义。这不是 VSCode 的锅,但你在 VSCode 里看 log 就会卡在这儿。
- 本地修复:运行
git config --global i18n.commitEncoding utf-8和git config --global i18n.logOutputEncoding utf-8 - 注意:如果团队用旧版 Git(i18n.logOutputEncoding 不生效,得靠
git log --encoding=utf-8临时指定 - 提交前检查:用
git commit -m "测试中文"后立刻git log -1验证,别等 push 完才发现全是\u序列
真正麻烦的从来不是配置本身,而是混合环境:一个项目里既有 UTF-8 的 .py,又有必须 GBK 才能双击运行的 .bat,还有 Git hook 里硬编码路径的 .sh。这时候靠单一全局设置只会让一部分东西正常,另一部分彻底崩掉——分层配、按需配,才是唯一稳住的路。











