vscode右下角编码显示的是编辑器解码方式而非文件真实编码;若显示utf-8但文件实为gbk,需点击编码选“reopen with encoding”并选gbk,切勿误点“save with encoding”。

右下角编码显示不对,立刻改
VSCode 右下角状态栏显示的编码(比如 UTF-8)不是“当前文件真实编码”,而是编辑器**当前用来解码这个文件的编码方式**。如果它显示 UTF-8,但你打开的是一个用 GBK 保存的老文本,那必然乱码。
点击那个编码字样,选 Reopen with Encoding → 找到并选择 GBK(或 GB2312、Chinese (GBK),不同版本名称略有差异)。这一步不改文件内容,只让 VSCode 换个“密码本”重新读一遍字节流。
- 别点
Save with Encoding—— 那会把文件内容按新编码重写,可能破坏原有格式或导致 Git diff 异常 - 如果列表里没看到
GBK,在命令面板(Ctrl+Shift+P)搜Change File Encoding,再输入gbk过滤 - 改完后如果中文正常了,但光标跳动异常或复制粘贴出问题,说明文件本身混用了编码,需另存为统一编码
终端输出中文乱码,得调系统层
代码跑起来后,集成终端里打印的中文是乱的,和编辑器里是否乱码无关。这是 Windows cmd/powershell 默认用 GBK(代码页 936),而 Python/Node 等运行时默认按 UTF-8 解释输出导致的。
临时解决:在终端里手动执行 chcp 65001(切换到 UTF-8 代码页),再运行程序。
- 永久生效:在 VSCode 设置里搜
terminal.integrated.defaultProfile.windows,把默认终端设为Windows PowerShell或Git Bash;然后在terminal.integrated.profiles.windows中给对应终端加启动命令,例如 PowerShell 加"args": ["-NoExit", "-Command", "chcp 65001 > $null"] - Python 用户额外加环境变量:
PYTHONIOENCODING=utf-8,否则print()输出仍可能被终端截断或转义 - 注意:改终端编码不影响编辑器内文件编码,两者要分开处理
注释或字符串字面量乱码,检查文件实际保存编码
编辑器里看着正常,一运行就报错或输出乱码,大概率是源文件保存时用了非 UTF-8 编码。比如用记事本保存的 .py 文件,默认是 ANSI(即当前系统代码页,在中文 Windows 就是 GBK)。
验证方法:用 Notepad++ 打开该文件,顶部菜单看“编码”是否显示 ANSI 或 GBK;或者用命令行 file -i filename.py(Linux/macOS)或 xxd -l 20 filename.py | head 查 BOM。
- 安全转换流程:在 VSCode 中用正确编码(如
GBK)重新打开 →File → Save As→ 点右下角编码 → 选UTF-8→ 勾选Save with BOM(可选)→ 保存为新文件名 → 替换原文件 - 不要直接“另存为 UTF-8”而不先用原编码打开,否则乱码内容会被当真字符保存,彻底毁掉原始中文
- C/C++ 用户注意:
#include路径含中文、或字符串字面量含中文时,GCC/Clang 编译器对源码编码有硬性要求,必须和-finput-charset匹配,否则编译报错
界面汉化后注释还乱,别漏掉字体配置
装了中文语言包、文件也存成 UTF-8,但注释里的中文显示为空心方块或小方框,问题不在编码,而在字体不支持中文渲染。
VSCode 默认字体(如 Consolas、Monaco)在 Windows/macOS 上通常不包含完整中文字形,需要手动指定一个中英混排字体。
- 设置里搜
editor.fontFamily,填入类似"Microsoft YaHei", "SimSun", "Consolas", "monospace"(逗号分隔,前面优先) - 避免只写
SimSun—— 它英文字符太丑;也别写"Fira Code"这类纯西文字体,中文直接 fallback 成方块 - 如果用了字体连字(ligatures),确保所选中文字体支持,否则连字功能会干扰中文显示
真正麻烦的从来不是“怎么切编码”,而是同一个项目里文件来源杂(Windows 记事本、Mac TextEdit、Git 提交历史)、工具链编码假设不一致(Python 3.7 默认 UTF-8,但某些嵌入式工具链只认 GBK)、还有人偷偷关了 files.autoGuessEncoding 还以为省事——这些地方一碰上,单靠点两下状态栏根本压不住。











