根本原因是windows终端默认gbk编码与工具链utf-8输出冲突,需在settings.json中为powershell配置args强制启用utf-8输出编码,并重启vscode生效。

VSCode内置终端无法显示中文,根本不是字体或插件问题,而是Windows终端层(CMD/PowerShell)默认用GBK(代码页936),而VSCode编辑器、脚本输出、Git日志等默认走UTF-8,两者在数据流中“各说各话”——chcp 65001只是临时补丁,不改底层配置必反复乱码。
确认当前终端编码是GBK还是UTF-8
打开VSCode集成终端,直接运行:
chcp
如果输出是活动代码页: 936,说明终端仍处于GBK;若为65001,但print("你好")仍显示??或方块,则问题出在程序层(如Python未声明源码编码)或PowerShell的$OutputEncoding未同步。
- 只改VSCode的
files.encoding对终端输出无效——那是文件保存编码,和终端渲染无关 -
echo $LANG在Windows终端里基本没用,因为CMD/PowerShell不读这个变量 - 真正起作用的是
chcp命令 + PowerShell的[Console]::OutputEncoding+ 程序启动环境变量三者一致
PowerShell终端永久设为UTF-8(推荐)
修改settings.json,强制每次启动PowerShell都加载UTF-8输出支持:
{
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "[Console]::OutputEncoding=[System.Text.Encoding]::UTF8"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
注意:args里不能混用chcp 65001和[Console]::OutputEncoding=...,后者更稳定,尤其对PowerShell Core 7+有效;前者在某些旧版PowerShell中会报错或失效。
- 改完必须关闭所有已打开的终端窗口,再新建一个才生效
- 不要在PowerShell配置文件(如
$PROFILE)里写[Console]::OutputEncoding=...——VSCode终端不加载用户profile - 如果用了Oh-My-Posh等主题,确保它不覆盖
$OutputEncoding,可在args末尾追加;$host.UI.RawUI.OutputEncoding=[System.Text.Encoding]::UTF8
Python脚本输出中文仍乱码?检查PYTHONIOENCODING
即使终端已切UTF-8,Python进程仍可能按系统默认(GBK)解码源码或输出。验证方式:在终端运行python -c "import sys; print(sys.stdout.encoding)",若输出cp936,就得强制指定:
- 临时方案:在终端里先执行
$env:PYTHONIOENCODING="utf-8"(PowerShell)或set PYTHONIOENCODING=utf-8(CMD) - 长期方案:在
settings.json中添加终端启动参数,例如为PowerShell加"args": ["-NoExit", "$env:PYTHONIOENCODING='utf-8'; [Console]::OutputEncoding=[System.Text.Encoding]::UTF8"] - 更彻底的做法是在Python文件头加
# -*- coding: utf-8 -*-,并确保文件本身以UTF-8无BOM保存
别忽略这点:VSCode调试运行(F5)走的是独立Python进程,不受终端编码影响,需另配launch.json里的env字段。
Docker容器内终端也乱码?那是镜像缺locale
如果你在Remote-Containers里开终端,发现echo "你好"还是显示??,问题不在VSCode,而在容器本身:
- 进容器执行
locale -a | grep zh_CN,无输出说明没装中文locale - 基础镜像(如
python:3.11-slim)默认不带locales包,需在Dockerfile里显式安装:RUN apt-get update && apt-get install -y locales && locale-gen zh_CN.UTF-8 - 然后设环境变量:
ENV LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 - 字体也要装:
apt-get install -y fonts-noto-cjk(否则中文能输出但渲染成方块)
宿主机VSCode装再多中文字体插件,对容器内终端毫无意义——容器是独立系统,它的locale和fontconfig才是关键。











