HTML中文乱码主因是文件实际编码与不一致;本地file://协议下无HTTP头,浏览器仅扫描前1024字节识别,若文件非UTF-8 with BOM(如GBK或UTF-8 without BOM),该标签将无法被正确解析,导致乱码。

直接加 ``,但光写这行不够,**文件本身必须存成 UTF-8 with BOM**,否则在本地双击打开(`file://` 协议)时大概率乱码。
为什么 `` 有时不生效
浏览器读 HTML 时按优先级找编码:先看 HTTP 响应头 Content-Type,再找 ``,最后 fallback 到系统默认(Windows 是 GBK)。但本地双击打开没有 HTTP 头,就只能靠 `` —— 而它只扫描前 1024 字节。如果文件实际是 GBK 编码,却写了 ``,字节流一错,连 `` 标签自己都会被解析成乱码,根本识别不了。
- 常见错误现象:
Uncaught SyntaxError: Invalid or unexpected token(JS 报错)、中文显示为 、emoji 显示为空方块、里文字全歪 - 根本原因不是标签写错,而是文件保存编码和 meta 声明不一致
- VS Code 默认保存为 UTF-8 without BOM,Notepad++ 默认是 ANSI,两者都容易踩坑
VS Code 里正确保存 UTF-8 with BOM 的操作
很多人以为“保存为 UTF-8”就够了,其实 VS Code 的“UTF-8”默认不含 BOM,必须手动选带 BOM 的版本:
- 编辑完 HTML 后,按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Save with Encoding,回车 - 从列表中明确选择
UTF-8 with BOM(不是“UTF-8”,也不是“UTF-8 with signature”) - 确认 `` 确实在 `` 开头、`
` 之前,前面不能有空行、注释或 `<script>`</script>
怎么验证文件真·是 UTF-8 with BOM
别信编辑器右下角写的“UTF-8”,要看真实字节:
- Linux/macOS 终端执行:
head -c 3 your.html | xxd,输出含ef bb bf才对 - Windows PowerShell 执行:
Get-Content your.html -Encoding Byte | Select -First 3,结果要是239 187 191 - Chrome 开发者工具 → Network → 刷新页面 → 点 HTML 文件 → Response Headers → 看
Content-Type是否含charset=utf-8(上线后才管用,本地 file:// 不显示这行)
真正卡住人的从来不是 `` 标签怎么写,而是编辑器保存时那一层隐式编码切换——BOM 就像一个“启动钥匙”,没它,`` 在本地根本没机会被读到。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











