chcp 65001是windows命令行切换至utf-8编码的指令,通过统一终端与程序的字符编码规则解决中文乱码;它仅对当前会话生效,需配合vscode终端启动配置和powershell的$outputencoding设置才能持久生效。

直接改 chcp 65001 能立刻让终端中文显示正常,但只对当前终端窗口有效;真要一劳永逸,得在 VSCode 启动终端时自动执行它,并配合 PowerShell 的 $OutputEncoding 设置。
chcp 65001 是什么,为什么它能临时修复乱码
Windows 终端默认用代码页 936(GBK)解码字节流,而你的 Python/C/Node 程序输出的是 UTF-8 字节。两者不匹配,中文就变成问号或方块。chcp 65001 命令就是把当前控制台的活动代码页强制切到 UTF-8,让终端用同一套规则去读字节——所以 echo 你好 和 python -c "print('测试')" 立刻变正常。
注意点:
-
chcp 65001中间不能有空格,写成chcp65001会报“无法识别的命令” - 它只影响当前终端会话,关掉重开就失效
- Git Bash、WSL 不支持这个命令,只适用于 cmd 和 PowerShell
PowerShell 必须配 $OutputEncoding,光 chcp 不行
PowerShell 启动时默认不设 $OutputEncoding,它会继承控制台代码页。即使你手动运行了 chcp 65001,子进程(比如 python main.py)输出的 UTF-8 字节仍可能被错误封装——因为 PowerShell 没告诉自己“接下来所有 stdout 都该按 UTF-8 处理”。
临时补救方法是手动运行:
$OutputEncoding = [System.Text.UTF8Encoding]::new()
但这行必须在每次新开终端后手动敲一遍。真正省事的做法是把它和 chcp 65001 一起塞进 VSCode 的终端启动配置里。
VSCode settings.json 中的正确配置方式
打开 settings.json(Ctrl+Shift+P → Preferences: Open Settings (JSON)),添加或修改 terminal.integrated.profiles.windows:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null; $OutputEncoding = [System.Text.UTF8Encoding]::new()"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
关键细节:
- 必须用
-Command参数,否则chcp和赋值语句不会按顺序执行 -
> $null是为了隐藏chcp的提示输出(如“活动代码页:65001”),保持终端干净 - 重启所有已打开的终端标签页(不是新建一个,而是关掉再点「+」),配置才生效
- 别用
[Console]::OutputEncoding,它只影响 .NET 控制台 API,对 Python/Node/C 无效
为什么终端还是乱码?检查这几个地方
如果照着做了还乱码,大概率是以下某个环节没对齐:
- 源文件本身是 GBK 编码,但 VSCode 以 UTF-8 打开——右下角点编码 → “通过编码重新打开” → 选 GBK,再另存为 UTF-8
- Python 脚本里用了中文字符串,但没声明源码编码(虽然 Python 3 默认 UTF-8,但某些旧环境或 IDE 插件会绕过)
- 设置了
terminal.integrated.profiles.windows,但没同步改terminal.integrated.defaultProfile.windows,导致新终端没走你配的 profile - 系统区域设置仍是旧模式(控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选“Beta 版:使用 Unicode UTF-8”),某些老工具链(如 MinGW 的 gdb)会因此异常
最常被忽略的是:终端配置生效后,必须关掉所有终端再新建,而不是在已有终端里 reload window 或重启 VSCode。这点容易卡住人半天。











