VSCode终端中文乱码的根本原因是终端代码页(如936)与程序UTF-8输出不匹配,必须先用chcp确认当前代码页为65001,再配置PowerShell启动参数、PYTHONIOENCODING环境变量及中文字体,缺一不可。

先确认终端当前代码页是不是UTF-8
乱码不是文件编码错了,而是终端“读”和程序“写”的编码对不上。第一步必须运行 chcp 看输出——如果返回 活动代码页: 936,说明终端还在用GBK;只有 65001 才是UTF-8。别跳过这步,否则所有后续配置都白搭。
PowerShell 7+ 默认禁用 chcp,得先执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 启用脚本权限。CMD下直接输 chcp 65001 能临时切过去,但关掉终端就失效。
PowerShell终端必须带 -NoExit 启动并预设UTF-8
只改 terminal.integrated.defaultProfile.windows 不够,得让PowerShell一启动就执行 chcp 65001,且不能执行完就退出。关键在 args 参数里必须包含 -NoExit 和 -Command:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
}
}
改完后必须重启VSCode(不是重开终端标签页),否则旧进程的代码页不会刷新。验证方式:新开终端后运行 [Console]::OutputEncoding,返回值里要有 UTF8Encoding。
Python/C等子进程输出仍乱码?环境变量没透传
终端是UTF-8了,但Python可能还按GBK写输出,因为它的 sys.stdout.encoding 没跟着变。这时候光靠 chcp 不行,得强制它用UTF-8:
-
terminal.integrated.env.windows里加"PYTHONIOENCODING": "utf8" - C语言用Code Runner时,在
code-runner.executorMap的c值开头加chcp 65001 && - 不要只设
terminal.integrated.defaultEncoding,这个只管VSCode怎么解码,不管子进程怎么写
Git Bash用户额外注意:LANG 和 LC_ALL 必须设成 zh_CN.UTF-8,否则它会退回到ASCII模式,连中文路径都拒绝处理。
字体不支持中文,再对的编码也显示方块
即使所有编码配置全对,终端用的字体不含中文字形,照样显示空格或方块。Ctrl+, 搜 terminal integrated font family,填入已安装的中英双语等宽字体:
Windows推荐 "Fira Code", "Microsoft YaHei"(注意英文名);macOS用 "SFMono-Regular", "PingFang SC";Linux可选 "Noto Sans CJK SC", "DejaVu Sans Mono"。改完必须关掉所有终端tab再新开,用 echo "测试" 验证。
真正容易被忽略的是:PowerShell的 $PROFILE 文件里如果写了 [Console]::OutputEncoding = [System.Text.Encoding]::Default 这类覆盖语句,会直接废掉所有JSON配置——检查并删掉它。


















