终端中文乱码主因是系统locale与终端编码未配对,VSCode界面汉化成功不等于终端能显示中文;Linux/macOS需生成zh_CN.UTF-8 locale并导出环境变量,Windows需在settings.json中配置chcp 65001及PYTHONIOENCODING,同时确保terminal.fontFamily西文优先、中文字体兜底。

终端中文乱码不是 VSCode 汉化失败,是系统 locale 和终端编码没配对
VSCode 界面设成 zh-cn 后终端仍显示方块或英文路径,99% 不是语言包问题,而是终端压根不读 VSCode 的 locale 设置。它走的是操作系统级环境变量(LANG、LC_ALL)和 shell 启动时的代码页(Windows)或 UTF-8 编码开关(Linux/macOS)。编辑器汉化成功 ≠ 终端能打中文。
Linux/macOS:必须生成 zh_CN.UTF-8 locale 并导出环境变量
光改 ~/.bashrc 或 ~/.zshrc 里加 export LANG=zh_CN.UTF-8 不够——系统可能根本没生成这个 locale。
- 先运行
locale -a | grep zh_CN,确认输出里有zh_CN.utf8或zh_CN.UTF-8 - 没有?用
sudo locale-gen zh_CN.UTF-8(Ubuntu/Debian)或sudo localedef -i zh_CN -f UTF-8 zh_CN.UTF-8(CentOS/RHEL)生成 - 再在 shell 配置文件末尾加两行:
export LANG=zh_CN.UTF-8export LC_ALL=zh_CN.UTF-8 - 执行
source ~/.zshrc(或source ~/.bashrc),然后在 VSCode 终端里运行echo $LANG验证是否生效
Windows:PowerShell/cmd 必须显式切 UTF-8 代码页
Windows 默认用 GBK(代码页 936),chcp 65001 是必须步骤,但只写这一句会失败。
- 打开 VSCode
settings.json,补全terminal.integrated.profiles.windows:
{
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
},
"Command Prompt": {
"path": "cmd.exe",
"args": ["/K", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
-NoExit 和 /K 缺一不可,否则终端启动即退出chcp 65001 && powershell —— PowerShell 启动后不会继承前一条命令的上下文"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"},否则 print("中文") 还是方块字体和 Python 输出常被忽略的两个硬坑
即使 locale 和代码页全对,终端里中文仍可能发虚、断字或不显示,原因就两个:
-
terminal.integrated.fontFamily没配,或配错顺序:必须西文字体在前、中文字体兜底,例如"Fira Code", "Microsoft YaHei", "Noto Sans CJK SC";写成"Microsoft YaHei", "Fira Code"会导致英文等宽失效、中文标点糊成一片 - Linux/macOS 下若
ls能列中文文件但python -c "print('中文')"输出方块,说明 Python 解释器没读到LANG,验证命令:python -c "import sys; print(sys.stdout.encoding)"。输出cp936就是没生效,得检查 shell 配置是否被 VSCode 终端绕过(比如用了 login shell 但没加载~/.zprofile)
真正卡住人的永远不是“怎么设”,而是“设完没生效却以为设错了”。终端中文显示是系统层、shell 层、VSCode 终端层、字体层四者叠加的结果,漏掉任意一层,都会在某个环节断掉。别盯着右下角状态栏看,直接进终端敲 echo $LANG 和 python -c "print('测试')" 才算真实反馈。











