最有效解法是将terminal.integrated.gpuAcceleration设为"off",因其默认开启导致Skia在集成显卡上光栅化出错,引发字符发虚、符号糊化、光标偏移;需配合已安装字体、正确编码及严格配置写法,并重启终端生效。

VSCode 控制台出现奇怪字符,基本就是终端渲染器(renderer)和字体、编码、GPU 加速四者没对齐。关掉 terminal.integrated.gpuAcceleration 是最立竿见影的解法,其他都是配套动作。
terminal.integrated.gpuAcceleration 设为 "off" 才生效
VSCode 1.85+ 默认开启 GPU 渲染,但 Skia 在多数集成显卡(Intel i915、AMD amdgpu)和部分 Windows 核显上会把 subpixel 光栅化算错,直接导致字符发虚、符号糊成一片、光标偏移、删除残留拖影。这不是抗锯齿问题,是像素值算错了。
必须注意配置写法:
- ✅ 正确:
"terminal.integrated.gpuAcceleration": "off"(字符串 "off") - ❌ 错误:
"terminal.integrated.gpuAcceleration": false(布尔值被忽略) - ❌ 错误:
"terminal.integrated.gpuAcceleration": "auto"(仍可能触发 GPU)
改完后必须关闭所有已打开的 Terminal 标签页(不是只关面板),再按 Ctrl + ` 新开——旧进程还绑在 GPU 上下文里,reload window 不管用。
fontFamily 必须已安装且写法严格
VSCode 终端不做字体 fallback,只按你写的顺序去系统里硬匹配。写错一个字母、少引号、用中文逗号分隔,就退回到系统默认字体(通常是不支持 emoji 或 CJK 的等宽字体),结果就是 → 显示成 □、✅ 显示成 ?、中文显示为空白或方块。
实操要点:
- Windows:确认
Cascadia Code已通过字体册或Win+R → fonts:安装;别只写"Cascadia Code PL",没装 PL 版本就挂 - macOS:用
"Fira Code", "Apple Color Emoji",避免单写Menlo(不含彩色 emoji) - Linux:先运行
fc-list | grep -i "noto\|cascadia",确保Noto Color Emoji和Noto Sans CJK SC已安装并刷新缓存(fc-cache -fv) - 配置中多个字体必须用英文逗号+空格分隔:
"Cascadia Code", "Microsoft YaHei", "monospace"
PowerShell / Git Bash 的 UTF-8 编码必须手动激活
终端能渲染中文 ≠ 进程输出中文。PowerShell 默认代码页是 936(GBK),Python 却按 UTF-8 输出字节流,终端用 GBK 去解,必然错位成 \344\273\243 或 □。这不是 VSCode 的 bug,是子进程和父终端之间的编码协商失败。
关键动作:
- PowerShell:在
settings.json中配terminal.integrated.profiles.windows,加"args": ["-NoExit", "-Command", "chcp 65001 > $null"];别信[Console]::OutputEncoding = ...,它对 python.exe 子进程无效 - Git Bash:编辑
~/.bashrc,追加export LANG=zh_CN.UTF-8和export LC_ALL=zh_CN.UTF-8(注意是下划线,不是短横);然后source ~/.bashrc - 验证是否真生效:
python -c "import sys; print(sys.stdout.encoding)"输出必须是utf-8(小写、带连字符)
为什么 print("✅") 看到 \U00002705?
这不是乱码,是 Python 交互模式下 repr() 的输出行为。你在终端里输入 "✅" 回车,看到的是字符串的“表示形式”,不是真实渲染结果。
真正判断终端是否正常,只看这一行:
python -c "print('✅')"
只要字体和编码都配对了,✅ 就会原样出现。如果这行也出错,再回头查 gpuAcceleration、fontFamily、PYTHONIOENCODING=utf8(注意:必须全小写、无连字符)这三个点——漏任何一个,都可能让 ✅ 变成空格、问号或干脆消失。











