终端启动即乱码且locale显示LANG=C,是macOS/Linux下VSCode未继承shell配置所致;应通过settings.json配置terminal.integrated.env.osx或env.linux设置LANG为zh_CN.UTF-8,Windows则需在PowerShell配置中添加chcp 65001并设PYTHONIOENCODING=utf-8。

终端启动就乱码,locale 显示 LANG=C
这是 macOS/Linux 上最典型的环境变量继承失败。VSCode 从 Dock 或桌面快捷方式启动时,不会加载 ~/.zshrc 或 ~/.bashrc,导致 shell 启动后 LANG 仍是默认的 C,Python 和命令行工具都 fallback 到 ASCII 编码。
实操建议:
- 在系统终端里运行
locale,确认LANG是类似zh_CN.UTF-8或en_US.UTF-8的值 - 打开 VSCode 设置(
Cmd+,),搜terminal.integrated.env,点击「在 settings.json 中编辑」 - 添加对应平台配置:
"terminal.integrated.env.osx": { "LANG": "zh_CN.UTF-8" }(macOS)或"terminal.integrated.env.linux": { "LANG": "zh_CN.UTF-8" } - 不要改
LC_ALL—— 它会覆盖所有 locale 子项,容易引发其他工具异常
Windows PowerShell 终端里中文变方块或问号
PowerShell 默认代码页是 936(GBK),但 Python、Node.js 等多数现代工具链默认输出 UTF-8,终端用 GBK 解码 UTF-8 字节流,必然错位。
实操建议:
- 在 VSCode 设置中,将
terminal.integrated.defaultProfile.windows设为PowerShell(别用Command Prompt) - 在
settings.json中配置 PowerShell 启动参数:"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } } - 重启 VSCode(不是重开终端标签页)——旧终端进程的 code page 不会自动刷新
- 验证:新开终端后运行
chcp,输出应为活动代码页: 65001;再运行[Console]::OutputEncoding,返回值应含UTF8Encoding
Git Bash 终端里中文路径报错或显示为问号
Git Bash 本身支持 UTF-8,但它依赖 LANG 和 LC_ALL 环境变量判断是否启用 Unicode 模式。一旦这两个变量为空或设成 C,它就退回到 ASCII 模式,拒绝处理中文路径和文件名。
实操建议:
- 在 VSCode
settings.json中添加:"terminal.integrated.env.windows": { "LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8" } - 检查 Git 安装时是否勾选了
Use Windows' default console window(必须勾选,否则底层 msys2 运行时不加载 locale) - 避免在
~/.bashrc里写export LANG=C—— 这是常见踩坑点,会直接覆盖 VSCode 注入的环境变量 - 如果仍报错
No such file or directory,先在终端运行locale,确认输出中LC_CTYPE是zh_CN.UTF-8而非zh_CN.GBK
Python print("中文") 输出为 或空格
这不是终端字体或 VSCode 设置的问题,而是 Python 解释器启动时读取了错误的终端编码信息。Windows 下它调用 GetConsoleOutputCP() 得到 936,于是把 sys.stdout.encoding 设为 cp936,但实际终端已切到 UTF-8,导致字节流解码失败。
实操建议:
- 临时验证:终端中先执行
chcp 65001,再运行python -c "import sys; print(sys.stdout.encoding)",必须看到utf-8 - 一劳永逸:在 VSCode
settings.json中加"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf-8" } - 调试器(Debug Console)也乱码?在
launch.json的配置里加"env": { "PYTHONIOENCODING": "utf-8" } - 不推荐在脚本里写
sys.stdout.reconfigure(encoding='utf-8')—— 它只在终端真实支持 UTF-8 且 Python ≥3.7 时生效,否则抛AttributeError
最容易被忽略的是:VSCode 终端右下角显示的「UTF-8」只是编辑器对文本流的解码提示,它不控制底层终端的 code page 或 locale。改那个下拉菜单,对 print() 输出完全没影响。


















