VSCode远程终端中文乱码主因是本地未向远程会话传递UTF-8环境变量,需在本地settings.json中同时配置"remote.SSH.env"和"terminal.integrated.env.linux",均设为{"LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8", "PYTHONIOENCODING": "utf-8"},并完全重启VSCode生效。

VSCode远程终端中文乱码,90%不是远程服务器配置问题,而是本地VSCode启动远程会话时没把UTF-8环境变量带过去——LANG、LC_ALL、PYTHONIOENCODING全被截断,远程shell只能fallback到C locale。
远程SSH终端里locale输出LANG=C或空白
这是最典型的信号:VSCode通过Remote-SSH插件连接Linux/WSL时,不会自动继承你本地shell的~/.bashrc或~/.zshrc里的export LANG=zh_CN.UTF-8,而是用一个最小化环境启动bash/zsh,LANG直接为空。
- 先在远程终端里运行
locale,如果LANG字段是C或空,就坐实了环境变量丢失 - 不要改远程
/etc/default/locale或/etc/environment——这些对VSCode SSH会话无效 - 必须在VSCode本地的
settings.json里配terminal.integrated.env.linux(注意不是.windows) - 值必须写成
{"LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8"},不能写zh-CN.UTF-8或UTF8,大小写和下划线都不能错
ssh -t user@host bash -l能显示中文,但VSCode Remote终端不行
说明远程系统本身完全支持UTF-8,只是VSCode没走login shell流程——它默认用bash -c方式启动,绕过了~/.bashrc加载,自然读不到你的export语句。
- 别在远程
~/.bashrc里加export LANG=zh_CN.UTF-8后就以为万事大吉,VSCode不读它 - 正确做法是:在VSCode本地设置中搜
remote.SSH.env,点“在settings.json中编辑”,加上"remote.SSH.env": {"LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8"} - 这个配置比
terminal.integrated.env.linux更底层,它会在SSH连接建立初期就注入环境变量,连scp、rsync等命令都受惠 - 改完必须完全退出VSCode(不只是关窗口),再重新打开远程窗口,否则旧会话不会刷新
远程Python脚本print("中文")还是乱码,但echo "中文"正常
这说明远程shell已正确识别UTF-8(locale输出正常),但Python解释器启动时仍按旧逻辑推断编码——它查GetConsoleOutputCP()这类Windows API失败后,fallback到ASCII或cp1252,而Linux上常退到ANSI_X3.4-1968(即C locale的ASCII子集)。
- 验证方法:
python -c "import sys; print(sys.stdout.encoding)",若输出不是utf-8就是它 - 不能只靠
export PYTHONIOENCODING=utf-8写在~/.bashrc里——VSCode SSH不加载它 - 必须双管齐下:
remote.SSH.env里加"PYTHONIOENCODING": "utf-8",同时terminal.integrated.env.linux也加同一项(覆盖终端内所有子进程) - 注意大小写:
utf-8和UTF-8在Linux上效果不同,推荐统一用utf-8
真正容易被忽略的是:Remote-SSH的环境变量注入发生在SSH连接层,而终端集成环境变量是另一层,两者不自动同步;不显式在两个地方都配,就总有某个环节掉链子。











