新建文件中文乱码根本原因是编码链断裂:VS Code默认UTF-8创建文件,但Windows系统工具(如记事本、bat/reg文件)依赖GBK,导致输入中文后底层字节被错误解析;应禁用自动猜测、按后缀精准关联编码(如*.txt→gbk),而非全局设utf8。

新建文件中文无法显示,根本不是文件“坏了”,而是 VSCode 默认用 UTF-8 创建文件,但你的系统或终端根本没准备好接 UTF-8 —— 尤其在 Windows 上,新建的 .txt、.ini、.bat 文件一写中文就变“涓枃”,十有八九是编码链断裂了。
新建文件一输中文就乱码?先看右下角状态栏是不是“UTF-8”
如果状态栏显示 UTF-8,但你刚按 Ctrl+N 新建一个空白文件,输入“测试”立刻变成方块或“娴嬭瘯”,说明问题不在文件本身,而在 VSCode 创建新文件时的默认行为与系统环境不匹配:
- Windows 默认记事本、注册表编辑器、老软件生成的 INI/REG 文件,几乎全用
GBK(即CP936)编码;VSCode 却坚持用UTF-8创建新文件,导致你敲的每个中文,在底层被当成 UTF-8 字节写入,而系统工具读它时仍按 GBK 解,必然错位 - 点右下角
UTF-8→ 选Save with Encoding→GBK,只是把当前文件覆写成 GBK,但下次Ctrl+N还是会新建 UTF-8 文件,治标不治本 - 真正要改的是新建逻辑:不是“让文件变 GBK”,而是“让新建动作默认用 GBK”——但这不能全局硬设,否则 Python 脚本保存后带 BOM 会报
SyntaxError: Non-UTF-8 code starting with '\xff'
settings.json 里加 "files.encoding": "utf8" 为什么反而更乱?
因为大小写和作用域都错了:
-
"utf8"必须全小写;写成"UTF-8"、"UTF8"或"utf-8",VSCode 直接忽略该配置,你以为设了,其实没生效 - 如果在用户级
settings.json(全局)加这行,所有新文件、所有语言、所有后缀都会强制 UTF-8 —— 看似统一,实则让.bat执行失败、.reg双击导入出错、Git 提交日志出现\u4f60\u597d - 正确做法是分层控制:对新建文件本身,不改默认编码,而是关掉自动猜测 + 显式声明常见中文后缀的关联编码,例如在工作区根目录的
.vscode/settings.json中写:
"files.associations": {
"*.txt": "gbk",
"*.ini": "gbk",
"*.reg": "gbk",
"*.bat": "gbk"
},
"files.autoGuessEncoding": false
这样,你双击打开一个老 config.ini,或新建一个 readme.txt,VSCode 都会按 GBK 处理;但 .py、.js 仍走默认 UTF-8,互不干扰。
终端输出中文正常,但新建文件里输中文还是乱?检查字体和系统 locale
这是常被忽略的底层依赖:
- VSCode 编辑器界面能显示中文 ≠ 编辑器内能正常渲染中文字符。如果新建文件里中文显示为方块、空心框或问号,大概率是
editor.fontFamily没包含中文字体,比如只写了'Fira Code',没 fallback 到'Noto Sans CJK SC'或'Microsoft YaHei' - Linux/macOS 用户还需确认系统 locale 是否启用 UTF-8:终端执行
locale,输出中LANG和LC_ALL应含zh_CN.UTF-8或en_US.UTF-8;若为C或POSIX,VSCode 字体回退机制可能失效 - Windows 用户注意:
chcp 65001只影响终端,不影响编辑器内新建文件的编码行为;别指望改终端就能让新建文本文件输中文不乱
最易被忽略的一点:新建文件的编码行为,由 files.encoding(创建时用什么编码)、files.autoGuessEncoding(是否尝试猜)、files.associations(后缀优先级)三者共同决定,缺一不可。任意一层配错,都可能让“新建→输中文→乱码”这个循环反复发生。


















