git bash中文路径显示方块的根本原因是lang和lc_all未正确设为zh_cn.utf-8,导致其退回到ascii模式;需在vscode的terminal.integrated.env.windows中配置这两个变量,并确保不被~/.bashrc覆盖,同时检查字体设置与终端启动参数。

Git Bash 终端中文路径显示方块:LANG 环境变量没生效
Git Bash 本身支持 UTF-8,但默认不启用宽字符支持——它只看 LANG 和 LC_ALL 是否明确设为 zh_CN.UTF-8。如果这两个变量是空、C 或 en_US.UTF-8,它就会退回 ASCII 模式,中文路径直接变 ??? 或方块。
- 新开终端后运行
locale,输出里LANG=后面不是zh_CN.UTF-8就说明没配对 - 在
settings.json中加这段(注意是terminal.integrated.env.windows):{ "terminal.integrated.env.windows": { "LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8" } } - 检查 Git 安装时是否勾选了 “Use Windows’ default console window” —— 没勾选会导致底层 msys2 运行时 fallback 到旧模式
- 绝对不要在
~/.bashrc里写export LANG=C,它会覆盖 VSCode 注入的环境变量
PowerShell 终端中文路径乱码:代码页没在进程启动时切换
PowerShell 默认用 CP936(GBK)解码路径,但 Python 或 Node.js 子进程按 UTF-8 输出路径字符串,解码错位就出方块。手动执行 chcp 65001 能临时修复,但新开终端又失效,说明没嵌入启动流程。
- 必须通过
terminal.integrated.profiles.windows配置让 PowerShell 启动即切码页 - 配置里
args必须含-NoExit和-Command,否则命令执行完终端就退出 - 推荐写法:
"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } } - 改完必须重启 VSCode,仅重启终端无效——旧 shell 进程的环境已固化
终端字体链缺失:中文路径能显示但字形仍是方块
即使编码全对,路径字符串也能被正确解码,但如果 terminal.integrated.fontFamily 没包含真实存在的中文字体,渲染层仍会 fallback 失败,最终画方块。
- Windows 下推荐值:
"Cascadia Code", "Sarasa Gothic SC", "Consolas"(注意用英文名Sarasa Gothic SC,别写“更纱黑体”) - Linux(尤其 Docker/Alpine)默认无中文字体,需先装
fonts-wqy-zenhei或noto-cjk,再重启 VSCode - 改完记得新开终端——旧终端不会刷新字体链
- 验证方式:在终端里输入
ls 中文目录,看路径名是否可读且无方块
Python 脚本里 os.listdir() 返回问号:sys.stdout.encoding 被骗成 cp936
即使终端已切 UTF-8,Python 启动时仍可能读取 Windows API 的 GetConsoleCP()(常返回 936),于是把 sys.stdout.encoding 设为 gbk,导致路径字符串写入失败或被替换为 ?。
- 最稳方案是在
settings.json中透传PYTHONIOENCODING=utf8(小写,Windows 下大写UTF-8会失效) - 对应配置项:
"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf8" } - 确认没在代码里硬编码
sys.stdout = io.TextIOWrapper(...),这会覆盖环境变量 - 验证:新开终端后运行
python -c "import sys; print(sys.stdout.encoding)",输出应为utf-8
-NoExit,或者 Git Bash 的 LANG 被 .bashrc 覆盖。改完任一环节,都得新开终端验证,而不是只看当前窗口。











