根本原因是windows终端默认用gbk(cp936)解码,而python按utf-8输出字节,导致编码不匹配;需设"terminal.integrated.env.windows": {"pythonioencoding":"utf8"}并重启终端,同时确保powershell的[console]::outputencoding也为utf-8。

终端输出中文是方块或问号,不是文件编码问题
VSCode里文件能正常显示中文,但print("你好")在集成终端里变成□或?,说明乱码发生在「程序输出 → 终端渲染」这一环,和files.encoding无关。根本原因是Windows终端默认用GBK(cp936)解码,而Python/Node等工具链默认按UTF-8输出字节——两边没对齐。
验证方法:在终端里运行chcp,如果返回活动代码页: 936,就坐实了这个问题。临时修复chcp 65001后立刻正常,也印证这点。
- 别改
files.encoding去“治”终端乱码,那是编辑器读文件的设置,不控制stdout -
terminal.integrated.encoding已被弃用,设了无效 - 字体选错(比如只配
Consolas)会导致方块,但那是另一层问题,先确认编码通不通
PowerShell终端必须同时设代码页和输出编码
只改chcp 65001不够:PowerShell自身[Console]::OutputEncoding仍可能是GBK,导致它启动的Python子进程收到错误的环境信号。必须双管齐下。
- 在
settings.json里加"terminal.integrated.profiles.windows",让新终端启动时自动执行chcp 65001 - 在PowerShell的
$PROFILE里写入[Console]::OutputEncoding = [System.Text.Encoding]::UTF8,否则python -c "import sys; print(sys.stdout.encoding)"仍可能输出cp936 - 不要用
-Command "chcp 65001; ...",得加-NoExit,否则终端一闪就关
Python输出乱码要靠PYTHONIOENCODING环境变量
即使终端代码页和字体都对了,print()还是糊,大概率是Python解释器启动时读了系统代码页,把sys.stdout.encoding设成了cp936。这时必须用环境变量强制覆盖。
- 在
settings.json里加"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}(注意小写utf8,大写UTF-8在Windows下不生效) - 如果用了
Code Runner插件,还得改它的执行命令,比如在code-runner.executorMap里把python对应值改成"chcp 65001 && python -u" - 调试器(Debug Console)不继承终端设置,需在
.vscode/launch.json的env字段里单独加{"PYTHONIOENCODING": "utf8"}
字体和系统区域设置是最后两道防线
编码全对但还显示方块?说明终端渲染层卡住了。Windows上常见原因是字体链没兜住中文,或者系统级locale没启用UTF-8。
- 在
settings.json里设"terminal.integrated.fontFamily": "Sarasa Gothic SC, Consolas, 'Courier New'"(注意英文名,Microsoft YaHei不是等宽字体,慎用) - 右键终端标题栏 → 属性 → 字体,手动选一个支持CJK的等宽字体,改完必须新开终端
- 系统级方案:控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选
Beta 版:使用 Unicode UTF-8 提供全球语言支持,重启生效。这个改动会影响所有命令行工具,包括Git Bash、WSL,是最彻底的解法
[Console]::OutputEncoding和Python的PYTHONIOENCODING必须同时存在,缺一不可。











