vscode终端中文乱码根源是编码标识错误或层级错位:chcp 65001仅对cmd有效,powershell需$outputencoding重置;pythonioencoding必须严格写为utf8(小写无连字符);lang必须为zh_cn.utf-8(下划线非短横);字体链还需同步配置系统终端属性。

chcp 65001 没生效,PYTHONIOENCODING 写成 UTF-8,LANG 设成 zh-CN.UTF-8 —— 这三类写法是 VSCode 终端中文乱码最常踩的硬编码坑,根源不是“没设编码”,而是设错了编码标识或层级错位。
PowerShell 终端里 chcp 显示 936,但 print("中文") 正常?
这说明终端底层已走 UTF-8(比如通过 $OutputEncoding = [System.Text.UTF8Encoding]::new() 强制重置),但 chcp 命令本身仍读取旧的 Windows 控制台代码页缓存,它只是个“表面指示器”,不能代表真实 I/O 行为。别依赖 chcp 输出判断是否修复成功,真正看的是 python -c "import sys; print(sys.stdout.encoding)" 是否输出 utf-8。
-
chcp 65001是 Windows 控制台级切换,只对 cmd 兼容层有效;PowerShell 更推荐用$OutputEncoding+[console]::InputEncoding双重赋值 - 若在
settings.json中配置terminal.integrated.profiles.windows,必须带-NoExit参数,否则终端启动即退出 - 不要在 PowerShell 的
$PROFILE里写[Console]::OutputEncoding = ...:它只影响 .NET 原生控制台 API,对python.exe这类子进程完全无效
PYTHONIOENCODING=utf8 大小写和拼写必须严格匹配
Windows 下 Python 解释器对 PYTHONIOENCODING 环境变量大小写敏感:UTF-8、UTF8、utf-8 都不行,唯一有效的是 utf8(全小写、无连字符)。设错后 sys.stdout.encoding 依然 fallback 到 cp936,print() 输出就变成 □ 或空格。
- 验证方式:终端中运行
python -c "import sys; print(sys.stdout.encoding)",输出必须是utf-8(注意连字符)才表示生效 - 如果用了 Code Runner 插件,它的执行命令不继承
terminal.integrated.env.windows,需单独在插件设置里补上python -u -c或前置set PYTHONIOENCODING=utf8 & - 调试器(Debug Console)走独立环境链,
launch.json中的"env"字段也必须写"PYTHONIOENCODING": "utf8",大写会静默失效
LANG=zh_CN.UTF-8 不能写成 zh-CN.UTF-8 或 zh_CN.utf8
Git Bash 和 WSL 对 locale 名称校验极严:zh-CN.UTF-8(带短横)会被识别为非法值,直接退化到 C locale,导致中文路径报错、ls 显示 ?;zh_CN.utf8(小写 utf8)在部分 msys2 版本里也不被接受。只有 zh_CN.UTF-8 是 POSIX 兼容标准写法。
- 检查是否生效:在 Git Bash 终端运行
locale,输出中LANG和LC_ALL必须严格等于zh_CN.UTF-8 - VSCode 设置中必须用
terminal.integrated.env.windows(Windows 平台),不能误用terminal.integrated.env.linux—— 后者在 Windows 上完全不加载 - Git Bash 安装时若勾选了 “Use Windows’ default console code page”,则无论
LANG设什么,底层都会 fallback 到 GBK,必须取消勾选
字体链写对了,但终端还是方块?你漏了系统级终端属性
VSCode 的 terminal.integrated.fontFamily 只控制渲染层字体链,而 Windows 控制台(conhost)本身有独立字体设置,两者不联动。即使你在 VSCode 里填了 "Cascadia Code", "Microsoft YaHei", monospace,只要右键终端 → 属性 → 字体 里选的是“点阵字体”或留空,实际渲染仍用无中文支持的默认字体。
- 必须手动进入终端窗口右键 → 属性 → 字体 → 选择
Cascadia Code或Consolas(不能选“Lucida Console”或“Raster Fonts”) - 改完后所有已打开终端必须关闭,再按
Ctrl + Shift + `新开——旧终端不会刷新字体栈 - SimSun(宋体)不是等宽字体,会导致光标偏移、对齐错乱,仅可作为 fallback,不可放在字体链首位











