HTML乱码主因是文件编码与声明不一致:TextEdit需关BOM并设UTF-8无BOM;VS Code须选“UTF-8”而非“UTF-8 with BOM”;meta charset必须位于head最开头且格式正确;导出后需用xxd验证无EF BB BF、检查meta位置及HTTP响应头charset。

直接用 TextEdit 或 VS Code 编辑 HTML 文件,但保存时若没关掉 BOM 或选错编码,打开就是乱码——这不是浏览器问题,是文件本身编码和声明不一致。
TextEdit 保存 HTML 必须关掉 BOM 和强制 UTF-8
macOS Ventura 的 TextEdit 默认导出会加 BOM(EF BB BF),而 HTML 解析器在前 1024 字节内扫不到 <meta charset="UTF-8"> 就 fallback 到系统默认编码(比如 MacRoman 或 GBK),中文立刻变问号。
- 手动导出时,点“文件 → 导出…”,格式选“纯文本”,**必须勾选“使用 UTF-8 编码”且确认没勾“添加 BOM”**(界面无显式开关,但勾了该选项即隐含无 BOM)
- 改默认行为:终端运行
defaults write com.apple.TextEdit PlainTextEncoding -int 4和defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4,重启 TextEdit 后新建文档自动 UTF-8 无 BOM - 检查是否成功:保存后执行
xxd -l 4 index.html,输出里**不能出现ef bb bf**;如果出现了,说明 BOM 还在,得重存
VS Code 保存 HTML 时别信右下角显示的“UTF-8”
VS Code 右下角写着“UTF-8”,不代表当前文件就是 UTF-8 无 BOM —— 它可能只是“以 UTF-8 解释这个文件”,而文件实际是 GBK 或 UTF-8 with BOM。乱码往往发生在这里。
- 点击右下角编码显示(如“UTF-8”或“GBK”),选“Save with Encoding” → **明确选
UTF-8(不是UTF-8 with BOM)** - 如果已存成带 BOM,先点“Reopen with Encoding” →
UTF-8,再点“Save with Encoding” →UTF-8覆盖保存 - 永久关闭 BOM:设置里搜
files.autoGuessEncoding设为true,再搜files.encoding改成utf8,并确保files.autoSave开启
<meta charset="UTF-8"> 必须放在 最开头
这个标签不是可有可无的装饰,它是浏览器解析 HTML 的第一道指令。如果它被注释、缩进、前面有空格或换行,甚至被 JS 动态插入,都可能导致前几段中文无法正确解码。
- 把它放在
内**绝对第一行**,前面不能有任何字符(包括空格、

















