VSCode终端乱码需同步解决字体、编码、远程locale三方面问题:Windows设Cascadia Code等字体,PowerShell执行$OutputEncoding=UTF8,SSH远程需export LANG=en_US.UTF-8。

VSCode终端显示乱码或方块:检查系统终端字体是否支持Unicode
VSCode内置终端(Integrated Terminal)本身不渲染字体,它依赖系统终端的字体渲染能力。如果中文、emoji、→、✅等字符显示为方块、问号或空白,大概率是当前终端使用的字体缺失对应字形。
实操建议:
- Windows:进入 VSCode 设置 → 搜索
terminal.integrated.fontFamily→ 改为"Cascadia Code", "Microsoft YaHei", "Segoe UI Emoji"(注意用英文逗号分隔,引号必须保留) - macOS:推荐使用
"Fira Code", "Apple Color Emoji";避免只设Menlo,它不包含彩色 emoji - Linux:确保已安装
noto-fonts-emoji或ttf-ancient-fonts-symbola,再在设置中指定"Noto Sans CJK SC", "Noto Color Emoji" - 改完后必须重启终端(关掉所有
Terminal标签页,再按Ctrl+`重新打开),仅重载窗口无效
PowerShell / Git Bash 中 Unicode 输出被截断或转义:关闭自动输出编码转换
某些 shell(尤其是 Windows 上的 powershell.exe 或旧版 git-bash)默认用 GBK 或 ISO-8859-1 解释 stdout,遇到 UTF-8 字节流就会丢字节或插 。这不是 VSCode 的 bug,而是子进程和父终端之间的编码协商失败。
实操建议:
- PowerShell:在 VSCode 设置中把
terminal.integrated.defaultProfile.windows改为"Windows PowerShell"后,在该终端首次运行:$OutputEncoding = [System.Text.Encoding]::UTF8 - Git Bash:编辑
~/.bashrc,追加export LANG=en_US.UTF-8和export LC_ALL=en_US.UTF-8,然后重启终端 - 验证是否生效:运行
locale(Linux/macOS)或[Console]::OutputEncoding(PowerShell),输出应含UTF-8
Python print(“✅”) 在终端里变成 “\U00002705”:print() 自动转义 vs 终端真实渲染
这不是编码问题,而是 Python 解释器在交互模式下对字符串的 repr 表现干扰了判断。你看到的 \U00002705 是 repr() 输出,不代表终端不能显示——真正执行 print("✅") 时,只要终端字体和编码就绪,✅ 就会正常出现。
实操建议:
- 别在
python交互式命令行里单敲"✅"看结果,那只是 repr;一定要用print("✅") - 脚本中若仍不显示,检查是否用了
sys.stdout.reconfigure(encoding="gbk")这类手动覆盖,默认就是 UTF-8 - 在 VSCode 中右键运行 Python 文件(Run Python File in Terminal)比直接进终端敲
python xxx.py更可靠,前者会自动注入正确环境变量
SSH 连远程服务器后 Unicode 失效:远程 locale 未启用 UTF-8
本地 VSCode 终端一切正常,但通过 ssh user@host 连上去后,ls 列出的中文文件名变 ???,或者 cat 日志里的 emoji 全部丢失——问题在远端系统的 locale 配置,和 VSCode 无关。
实操建议:
- 登录后先运行
locale,确认LANG和LC_CTYPE是类似en_US.UTF-8或zh_CN.UTF-8,而不是C或空 - 临时修复:运行
export LANG=en_US.UTF-8(生效到当前会话) - 永久修复(Ubuntu/Debian):
sudo locale-gen en_US.UTF-8+sudo update-locale LANG=en_US.UTF-8 - 注意:某些精简镜像(如 Alpine)默认无 UTF-8 locale,需先
apk add --no-cache glibc-i18n再生成
最常被忽略的一点:VSCode 终端的「编码」设置(terminal.integrated.env.*)无法覆盖 shell 启动时已加载的 locale,必须从 shell profile(.bashrc、.zshrc、$PROFILE)源头控制。字体、shell 编码、远程 locale,三者缺一不可。


















