新建HTML文件时编辑器默认用UTF-8(无BOM)仅对空白文件生效;打开GBK等旧文件后保存仍沿用原编码,需手动“Save with Encoding→UTF-8”才能确保有效,否则中文乱码。

新建 HTML 文件时,VS Code、Sublime Text、Notepad++ 等主流编辑器默认会用 UTF-8(无 BOM)保存,但这个“默认”只对全新空白文件生效;一旦你打开一个已存在的 GBK 或 ISO-8859-1 编码的旧文件再保存,编辑器大概率沿用原编码,meta charset="UTF-8" 就会失效——乱码不是标签写错了,是文件根本没存成 UTF-8。
VS Code 新建文件的编码行为与陷阱
VS Code 默认新建文件为 UTF-8(无 BOM),但有两个关键例外:
- 当你通过
File → Open File…打开一个 GBK 编码的 HTML 文件,它会自动识别并以 GBK 读取,此时即使你写了<meta charset="UTF-8">,保存后仍是 GBK 文件 - 右下角状态栏显示的编码名称(如 “GBK”)只是当前读取方式,不等于保存编码;必须手动点击该区域,选
Save with Encoding → UTF-8才真正转存 - 如果文件含中文且未手动保存为 UTF-8,DevTools 的
document.characterSet仍可能返回"UTF-8"(因 meta 标签被解析),但实际内容已被错误解码——<title>你好</title>在 DOM 中可能已变成<title>浣濂</title>
Sublime Text 和 Notepad++ 的保存逻辑差异
这两款工具不会自动识别文件编码后“悄悄”改写,但默认保存行为不同:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- Sublime Text:新建文件默认 UTF-8(无 BOM),但打开旧文件后,
Save不改变编码,必须显式执行File → Save with Encoding → UTF-8 - Notepad++:新建文件默认 ANSI(Windows 下即 GBK),不是 UTF-8;必须点菜单
编码 → 转为 UTF-8-BOM或转为 UTF-8,再保存才生效 - BOM 是双刃剑:UTF-8-BOM 可帮 IE 正确识别编码,但某些构建工具(如 Webpack)或服务端模板引擎会把 BOM 当作非法字符报错;纯 UTF-8(无 BOM)更通用,但老 IE 可能 fallback 到 GBK
如何验证新建文件是否真为 UTF-8
不能只看编辑器右下角或 meta 标签,要查原始字节:
- 用十六进制编辑器(如 VS Code 安装 Hex Editor 插件)打开文件,检查开头三字节:应为
EF BB BF(有 BOM)或直接是/code> 的 ASCII 字节(无 BOM);若开头是 <code>CE C2类似字节,基本是 GBK - 在终端运行:
file -i your-page.html(Linux/macOS)或chcp+type your-page.html | head -c 10(Windows)辅助判断 - 浏览器 DevTools → Network → 点 HTML 请求 → Headers → Response Headers 查
Content-Type;如果是file://协议,这里为空,则完全依赖文件自身编码和meta标签顺序
最易被忽略的一点:新建 HTML 文件时,<meta charset="UTF-8"> 必须紧贴 开始,且前面不能有任何字符(包括空格、换行、BOM 冲突、注释)。哪怕多一个看不见的零宽空格(U+200B),某些浏览器就会跳过该标签,直接 fallback 到系统默认编码。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










