必须置于 起始后首个非空白非注释位置,文件须为无bom的utf-8编码,且http响应头content-type需为text/html; charset=utf-8(file://协议下仅依赖meta),三者缺一不可。

直接用 可以解决大部分 HTML 中文乱码问题,但前提是它得“起效”——位置对、文件编码对、没有干扰项。光写这行代码不等于万事大吉。
meta 标签必须放在正确位置
浏览器只扫描 HTML 文件前 1024 字节来查找 charset 声明。如果它被挡在后面,就直接失效。
- 必须放在
内,且是的第一个非空白、非注释子元素 - 前面不能有任何字符:包括空格、换行、
<!-- 注释 -->、<script></script>标签,甚至不可见的 BOM 字节 - 别写成
<meta charset="utf8">或<meta charset="UTF8">—— 只有"UTF-8"是标准写法(注意连字符和大小写) - 删掉所有重复的 charset 声明,例如同时存在
<meta charset="UTF-8">和<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
HTML 文件本身必须是 UTF-8 编码(无 BOM)
标签说“我是 UTF-8”,但文件实际是 GBK 或 UTF-8 with BOM,浏览器照样解错。
- 在 VS Code 右下角查看编码显示,若为 “UTF-8 with BOM” 或 “GBK”,点击它 → “Save with Encoding” → 选 “UTF-8”(明确不含 BOM)
- Notepad++:菜单栏“编码” → “转为 UTF-8 编码”(不是 “UTF-8-BOM”)
- Linux/macOS 验证命令:
head -c 4 index.html | xxd,输出含ef bb bf表示有 BOM,需清除后重存 - 别用 Word、微信、QQ 等富文本工具编辑 HTML 文件,它们容易插入隐藏格式或 BOM
注意 HTTP 响应头可能覆盖 meta 标签
当网页通过 http:// 或 https:// 访问时,服务器返回的 Content-Type 响应头优先级高于 <meta charset>。
- F12 打开开发者工具 → Network → 刷新 → 找到主 HTML 请求 → 查看 Response Headers 中的
Content-Type - 理想值是:
text/html; charset=utf-8(小写 utf-8,带空格和分号) - 若显示
charset=gbk或压根没charset子句,需改服务器配置:Nginx 加charset utf-8;;Express.js 在res.send()前加res.set("Content-Type", "text/html; charset=utf-8")
file:// 协议下只靠 meta 标签生效
本地双击打开 HTML 文件(地址栏是 file:///...)时,没有 HTTP 响应头,此时完全依赖 <meta charset>。
- 务必确保上述三项(位置、文件编码、唯一性)全部满足,否则 Windows 系统会默认用 GBK 解析,中文立刻变乱码
- 这种场景下,
<meta http-equiv="Content-Type">已被 HTML5 废弃,不推荐使用
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











