vscode终端中文乱码须配置terminal.integrated.profiles.windows强制chcp 65001,并设pythonioencoding=utf8和中文字体链,改后需关闭所有终端重启生效。

terminal.integrated.profiles.windows 必须配置 chcp 65001
VSCode 集成终端中文乱码,90% 是因为 PowerShell 或 CMD 启动时仍用 CP936(GBK)写入 stdout,而 VSCode 默认按 UTF-8 解析字节流。只改 files.encoding 或 terminal.integrated.encoding(已弃用)完全无效。
实操建议:
- 在
settings.json中完整配置terminal.integrated.profiles.windows,不能只设defaultProfile - PowerShell 5.1 推荐用:
"args": ["-NoExit", "-Command", "chcp 65001 > $null"] - CMD 推荐用:
"args": ["/K", "chcp 65001"],/K确保执行后终端不退出 - 改完必须关闭所有已打开的集成终端,再新建一个才生效
PYTHONIOENCODING 环境变量要设对且生效
Python 脚本输出中文乱码,本质是 sys.stdout 编码 fallback 到系统 locale(如 GBK),而终端却按 UTF-8 解码。光靠 chcp 65001 不够,Python 进程本身需明确知道该用什么编码写入。
实操建议:
- 在
settings.json中添加:"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}(注意是小写utf8,不是UTF-8或utf-8) - 该变量仅对新启动的终端进程有效,旧终端需手动关闭重开
- Debug Console 不继承此设置,需在
.vscode/launch.json的env字段里单独加同名变量 - 若用老版 ptvsd,还需确认调试参数不含
--log-to-stderr,否则编码警告日志会干扰判断
terminal.integrated.fontFamily 必须显式指定中文字体
即使编码全对,终端仍显示方块或空白,说明是字体渲染问题,不是乱码。VSCode 不会自动 fallback 到系统中文字体,必须手动声明字体链。
实操建议:
- 在
settings.json中设置:"terminal.integrated.fontFamily": "'Cascadia Code', 'Microsoft YaHei', 'SimSun', monospace" - 中文字体名必须用单引号包裹,多个字体用英文逗号分隔
- 避免只写
"Microsoft YaHei":它不是等宽字体,在侧边栏或表格对齐场景易错位;Cascadia Code是微软官方推荐的等宽中文字体,需提前安装 - macOS 用户请换用
"'Fira Code', 'PingFang SC', 'Helvetica Neue'";Linux 用户需确认已装fonts-wqy-zenhei或noto-fonts-cjk
Output 面板乱码和终端无关,得动 Node.js 层
插件日志、语言服务器通信、ESLint 输出等出现在 Output 面板里的中文变成 或空格,这不是终端配置能解决的——这些内容由 VSCode 的 Extension Host(基于 Node.js)生成,走的是独立 I/O 流。
实操建议:
-
files.encoding和chcp对 Output 面板完全无效 - Windows 上需在系统环境变量中设置
NODE_OPTIONS=--experimental-utf8(Node.js ≥18.17+ 才支持) - 更兼容的做法是:若你开发插件,在
console.log()前手动调用process.stdout.setEncoding('utf8') - 检查插件自身是否把中文硬编码为
\u4f60\u597d形式且文件未存为 UTF-8 无 BOM —— 右下角点编码 → “Reopen with Encoding” → 选 UTF-8,再点 → “Save with Encoding” → 选 UTF-8
真正卡住人的地方往往不是某一项没配,而是几层编码链路里有一环断了:shell 启动时没切 code page、Python 进程没收到 PYTHONIOENCODING、终端字体不支持 CJK 扩展区、或者 Output 面板背后那个 Node.js 进程压根没启用 UTF-8 模式。逐层验证比盲目堆配置更省时间。











