chcp 65001可立即切换当前终端代码页为utf-8,解决中文乱码,但仅限本次会话;powershell还需设置$outputencoding = [system.text.utf8encoding]::new()并配置vs code terminal.integrated.profiles.windows实现自动生效。

chcp 65001 能立刻生效,但只作用于当前终端会话
运行 chcp 查看当前代码页,如果输出是 活动代码页: 936,说明终端正用 GBK 解释字节流,而你的程序(如 C 的 printf、Python 的 print)输出的是 UTF-8 字节——两者不匹配,中文就变成问号或方块。
在 VS Code 终端里直接执行:chcp 65001
执行后立刻变正常,echo 你好 和 python -c "print('测试')" 都能正确显示。
- 这个命令只改当前终端窗口的代码页,关掉重开就失效
- 别写成
chcp65001(中间不能有空格),否则报错无法识别的命令 - cmd 和旧版 PowerShell 都支持,但 Git Bash / WSL 不认这个命令
PowerShell 终端必须设 $OutputEncoding,光 chcp 不够
PowerShell 启动时默认不设 $OutputEncoding,它会继承控制台代码页;即使你运行了 chcp 65001,子进程(比如 python main.py)输出仍可能被错误解码——因为 Python 拿到的是 UTF-8 字节,但 PowerShell 没告诉自己该用 UTF-8 去封装这些字节。
临时修复:在终端里运行$OutputEncoding = [System.Text.UTF8Encoding]::new()
- 这行之后,所有子进程 stdout 都会被正确转为 UTF-8 字节流
- 千万别用
[Console]::OutputEncoding = ...,它只影响 .NET 控制台 API,对 Python/Node/C 程序无效 - 想永久生效?运行
notepad $PROFILE,把上面那行粘贴进去保存
VS Code 设置里配 terminal.integrated.profiles.windows 才算一劳永逸
手动敲命令太麻烦,每次新开终端都要来一遍。真正省心的做法是让 VS Code 在启动 PowerShell 时自动执行 chcp 65001 和环境变量设置。
打开 VS Code 设置(Ctrl + ,),搜 terminal.integrated.profiles.windows,点击「在 settings.json 中编辑」,加入:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null; $env:PYTHONIOENCODING='utf-8'; $env:PYTHONUTF8='1'"]
}
}
- 必须重启所有终端(不是新建标签页,是关掉再点「+」新建)才生效
-
> $null是为了隐藏chcp的提示输出,保持干净 - 加
PYTHONIOENCODING和PYTHONUTF8是防 Python 自己又绕过终端编码
C 程序中文乱码,别只盯终端,还得看源文件编码
就算终端和 shell 全配成 UTF-8,printf("中文") 还是显示问号?大概率是源文件本身不是 UTF-8 编码。
检查 VS Code 右下角状态栏显示的编码,如果是 GBK 或 GB2312,说明文件内容实际按 GBK 存的,但你用 UTF-8 终端去读,自然错位。
- 先点右下角编码名 → 选
Reopen with Encoding→ 试GBK,看中文是否立刻恢复 - 恢复后,再点右下角 →
Save with Encoding→ 选UTF-8(无 BOM)保存 - gcc 编译时加
-finput-charset=UTF-8 -fexec-charset=GBK是权宜之计,长期维护建议统一用 UTF-8 源码 + UTF-8 终端
$OutputEncoding。改了那个下拉菜单,对 printf 或 print 的输出行为毫无影响。











