VSCode中文乱码主因是编码链路错配,需分层处理:先右下角点UTF-8→Reopen with Encoding→试GBK/GB2312确认真实编码;显示正常后→Save with Encoding→UTF-8转存;再配"files.autoGuessEncoding": false和"files.encoding": "utf8"确保稳定。

VSCode中文乱码不是“没装对语言包”,而是编码链路中某一个环节配错了——文件读取、终端输出、Git提交、甚至新建文件写入,各自走的编码路径不同,必须分层处理。
右下角编码标识点开后选什么
这是最快速验证和修复单个文件乱码的操作入口,但容易选错项:
- 看到方块/问号,先点右下角
UTF-8→ 选Reopen with Encoding→ 尝试GBK或GB2312;若恢复,说明文件实际是 GBK 编码 - 确认内容正常后,**不要直接关掉**,再点同位置 → 选
Save with Encoding→UTF-8,把文件转成 UTF-8 存盘,一劳永逸 - 如果点开后只有
UTF-8和Auto Detect,没看到 GBK 选项:说明 VS Code 没装GBK Format Support扩展,需手动安装 - 误选
Save with Encoding成 GBK 后再用 Git 提交,可能触发\u4f60\u597d这类 Unicode 转义,因为 Git 默认不认 GBK
settings.json 里该加哪几行
全局配置不是“加一行就完事”,不同字段作用完全不同,混用反而引发新问题:
-
"files.encoding": "utf8":只影响「新建文件」和「无 BOM 的旧文件」的默认读取/保存编码,适合新项目;老项目含大量 .txt/.bat,硬设会崩 -
"files.autoGuessEncoding": false:必须关掉。VS Code 的自动猜测常把 GBK 文件当 UTF-8 解,关掉后才严格按你指定的 encoding 或 BOM 加载 -
"files.associations": { "*.txt": "gbk", "*.md": "utf8" }:针对特定后缀强制编码,比全局设更安全,尤其适配遗留 Windows 项目 -
"terminal.integrated.env.linux": {"LANG": "zh_CN.UTF-8"}:仅 Linux/WSL 有效;Windows 下对应的是"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}
终端里 print("中文") 还是乱码怎么办
这不是 VS Code 编辑器的问题,是 shell 层级的编码未对齐:
- 在集成终端输
[Console]::OutputEncoding(PowerShell)或locale(Linux/macOS),看输出是否为 UTF-8 - PowerShell 永久生效:编辑
$PROFILE,加一行$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - Windows cmd 用户:必须在 VS Code 设置里加
"terminal.integrated.shellArgs.windows": ["-c", "chcp 65001 >nul && powershell"],否则chcp 65001只在当前会话有效 - WSL 用户别碰 VS Code 的 Windows 终端配置,直接进子系统改
/etc/default/locale,VS Code 终端会自动继承 - 字体无关——终端乱码跟
editor.fontFamily完全无关,那是编辑器区的设置
为什么 Configure Display Language 命令不能跳过
VS Code 1.70+ 已废弃 settings.json 里的 "locale" 字段,它现在只读取独立的 locale.json 文件:
- 手动往
settings.json写"locale": "zh-cn"—— 无效,VS Code 直接忽略 - 必须用快捷键
Ctrl+Shift+P→ 输入Configure Display Language→ 选zh-cn,它才会自动生成并写入~/.vscode/locale.json - Remote-SSH 或 WSL 环境需单独执行该命令,主窗口设了不影响远程窗口
- 改完不退出干净:托盘进程残留会导致重载失败,终端执行
killall code再启动
最容易被忽略的是“新建文件粘贴中文后保存变乱码”这个场景——它既不是读取错误,也不是终端问题,而是系统区域设置 + VS Code 写入路径未对齐导致的,必须靠 files.autoGuessEncoding: false + files.encoding: utf8 双锁死才稳定。


















