VSCode控制台乱码?编码格式UTF-8设置【手册】
VSCode终端中文乱码因系统代码页、Shell初始化、Python环境变量及VSCode启动注入四环节配置不当。需设置PYTHONIOENCODING=utf8、chcp65001、修改PowerShell的$PROFILE及启动参数,缺一不可。
VSCode终端输出中文变成乱码,这事儿说起来挺让人头疼的。很多人的第一反应是去改编辑器里的“files.encoding”,折腾半天,发现一点用都没有——因为问题根本不在编辑器,而在终端运行时环境。简单说,你需要在操作系统代码页、shell初始化流程、Python运行时环境变量、VSCode启动注入这四个环节都做对配置,少一环都可能随时复现。

VSCode控制台输出中文乱码,跟编辑器里的文件编码设置完全无关——改files.encoding是没用的,必须动终端运行时环境。
咱们先从一个快速验证开始。在VSCode终端执行chcp命令,看看返回什么。如果显示的是“活动代码页: 936”,那问题就清楚了:终端正用GBK解码,但你的Python或Node.js默认按UTF-8输出,两边的编码对不上。
- 很多新手会犯一个错误:只改VSCode设置里的
files.encoding,或者在右下角点一下转文件编码——这对终端输出没有任何影响。 - 临时验证方法很简单:执行
chcp 65001切换到UTF-8代码页,再跑一下python -c "print('你好')",如果显示正常了,那就可以确定是shell层的编码问题。 - PowerShell用户要特别留意:
chcp 65001只对当前会话生效,关掉终端再打开就又回到936了,必须靠配置固化下来。
关于如何永久生效,关键不是“让终端支持UTF-8”,而是“让Python/Node进程强制用UTF-8输出”。VSCode不直接控制终端编码,而是通过注入环境变量和启动命令来影响子进程。
- 在用户或工作区的
settings.json中加上这一段(针对Windows):"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf8" } - PowerShell用户还需要修改自己的
$PROFILE,追加一行:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 注意一个小细节:别写成
UTF-8或utf-8,PYTHONIOENCODING只认utf8(全小写无短横),否则Python会直接忽略。 - 改完必须关闭所有已打开的终端标签页,再新建一个才会生效。
仅仅设置环境变量还不够。VSCode启动终端时,如果没有显式调用chcp 65001,PowerShell或CMD仍然可能沿用系统默认的代码页(936)初始化,导致环境变量还没起作用就崩了。
- 在
settings.json里配置profile启动参数(以PowerShell为例):"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "$env:PYTHONIOENCODING='utf8'; chcp 65001 > $null"] } } - cmd用户同理,
args改成:["/c", "chcp 65001 > nul && cmd.exe"] - 别忘了加上
"terminal.integrated.defaultProfile.windows": "PowerShell",确保新终端默认走你配的那个profile。 - 字体不参与编码判定,但如果你已经正确输出了UTF-8字节,却显示为空心方块,那才是字体问题——这时候搜
terminal.integrated.fontFamily,填"Cascadia Code", "Microsoft YaHei"这类组合就行。
真正容易被忽略的是:终端乱码从来不是单点问题。它卡在操作系统代码页、shell初始化流程、Python运行时环境变量、VSCode启动注入四个环节之间。少配任何一环,都可能在某一天突然复现——比如更新PowerShell版本后$PROFILE不再自动加载,或者把Git Bash设为默认终端却没单独配置它的环境。所以,别指望靠一招鲜吃遍天,四个环节都盯紧了,才能一劳永逸。
