VSCode中文乱码主因是终端解码与程序编码不匹配,需统一编码(推荐UTF-8)、设置PYTHONIOENCODING环境变量、配置支持中文的等宽终端字体。

VSCode运行脚本时中文乱码,**问题几乎从不发生在代码本身,而是输出链路中“程序编码 → 终端解码”不匹配**。你写的print("你好")没问题,但终端用GBK去读UTF-8字节流,就变成浣犲ソ;或者反过来,代码用了GBK字符串,终端却按UTF-8解,就出现锟斤拷。关键不是改代码,是让两端用同一套“词典”。
查终端当前解码方式:先确认VSCode集成终端用的是什么编码
在VSCode集成终端里直接执行:
chcp
Windows下返回类似 活动代码页: 936 —— 这就是GBK(936是GBK的代码页编号);如果是 65001,那就是UTF-8。Linux/macOS终端则看环境变量:
echo $LANG
如果输出是 zh_CN.UTF-8 或 en_US.UTF-8,说明终端支持UTF-8;若为 zh_CN.GB18030 或空值,则大概率会出乱码。
常见错误现象:
- Python脚本输出
浣犲ソ→ 终端用GBK解UTF-8字节(典型于Windows默认终端+UTF-8脚本) - 输出
????或方块 → 终端字体不支持中文,或LANG为空/错配 - 输出
或U+FFFD替换符 → 字节流本身已损坏(比如文件被误保存过)
强制Python脚本按UTF-8输出:绕过系统默认编码干扰
Python 3.7+ 默认使用utf-8,但Windows上常被系统cp936覆盖。不要依赖环境,显式控制输出编码:
在脚本开头加这两行(适用于所有Python版本):
import sys sys.stdout.reconfigure(encoding='utf-8')
或者更稳妥地,在运行命令前设置环境变量:
Windows终端里运行前加:
set PYTHONIOENCODING=utf-8 && python your_script.py
macOS/Linux终端里运行前加:
PYTHONIOENCODING=utf-8 python your_script.py
也可以全局配置:在VSCode的settings.json中添加:
"terminal.integrated.env.windows": {
"PYTHONIOENCODING": "utf-8"
},
"terminal.integrated.env.linux": {
"PYTHONIOENCODING": "utf-8"
}
改VSCode终端的代码页或LANG:让终端主动匹配脚本
如果你坚持用GBK文件、GBK字符串,那就得让终端配合它,而不是反过来。但注意:这是权宜之计,跨平台项目强烈建议统一用UTF-8。
Windows下临时切换(仅当前终端有效):
chcp 936
macOS/Linux下临时切换(仅当前终端有效):
export LANG=zh_CN.GB18030
⚠️ 风险提示:
-
chcp 936后,再运行UTF-8脚本,必然乱码(浣犲ソ) - 改
LANG后,某些Linux工具(如git log)可能显示异常 - 这些设置不会自动继承到新打开的终端,每次都要重设
字体和渲染层:最后但不可跳过的环节
即使编码全对,终端字体不支持中文,照样显示方块或空格。VSCode默认字体如Consolas、Monaco在Windows/macOS下不带中文字形。
必须手动指定支持中文的等宽字体:
在VSCode设置里搜 terminal.integrated.fontFamily,填入:
- Windows:
"Cascadia Code", "Microsoft YaHei", "SimSun", "Consolas" - macOS:
"Fira Code", "PingFang SC", "Monaco" - Linux:
"Fira Code", "Noto Sans CJK SC", "DejaVu Sans Mono"
注意用英文逗号分隔,引号包裹,优先级从左到右。别只写一个SimSun——它不是等宽字体,会导致对齐错乱。
真正容易被忽略的是:**终端字体设置和编辑器字体设置是分开的**。editor.fontFamily管代码显示,terminal.integrated.fontFamily管输出框,改错地方等于白干。


















