HTML中文乱码90%因文件实际编码≠编辑器识别编码,且<meta charset="UTF-8">未被读到;须确保该标签紧贴<head>开头、无BOM/空格/注释,并统一保存为UTF-8(无BOM),同时服务器HTTP响应头Content-Type必须含charset=utf-8。

直接说结论:HTML 编辑器里中文显示乱码,90% 是因为文件实际保存的编码 ≠ 编辑器当前识别的编码,且 <meta charset="UTF-8"> 没起效——不是标签写错了,而是它根本没被读到。
VS Code 或 Sublime 里中文变问号或方块
这是最典型的「编辑器误判编码」现象。比如你用记事本存了个 GBK 编码的 HTML,再用 VS Code 打开,默认可能按 UTF-8 解析,中文就崩了。
- 别信右下角状态栏显示的「UTF-8」——那只是编辑器「以为」的编码,不等于文件真实编码
- 在 VS Code 中,点击右下角编码名称(如
UTF-8或GBK),选Reopen with Encoding,逐个试GBK、GB2312、UTF-8,直到中文正常 - 确认正确编码后,立刻点同一位置选
Save with Encoding→ 强制存为UTF-8(注意:选纯UTF-8,不是UTF-8 with BOM) - Sublime 同理:菜单
File → Reopen with Encoding尝试,再File → Save with Encoding → UTF-8
<meta charset="UTF-8"> 写了但还是乱码
说明浏览器压根没看到这行——它被挡在了前面。
- 检查
<meta charset="UTF-8">是否紧贴<head>开始,前面**不能有任何字符**:包括空格、换行、BOM、HTML 注释<!-- -->、甚至<script>标签 - 用命令行验证 BOM:
xxd -l 4 index.html(Linux/macOS)或Get-Content index.html -Encoding Byte | Select -First 3(PowerShell),输出含ef bb bf就有 BOM,必须删 - VS Code 默认 Windows 下保存带 BOM,删 BOM 方法:先
Reopen with Encoding → UTF-8,再Save with Encoding → UTF-8(此时会自动去 BOM) - 写法必须是
<meta charset="UTF-8">,不是<meta charset="utf8">或<meta charset="UTF8">,大小写和连字符敏感
服务器返回的 HTTP 头覆盖了 meta 标签
本地双击打开(file://)时只看 meta;但走 HTTP 协议时,服务器的 Content-Type 响应头优先级更高。
立即学习“前端免费学习笔记(深入)”;
- F12 打开开发者工具 →
Network→ 刷新 → 点 HTML 文件 → 看Response Headers里的Content-Type - 如果值是
text/html; charset=gbk或不含charset,说明服务器配置错了 - Nginx 配置要加:
charset utf-8;(注意是小写,且放在http或server块里) - Express.js 必须在
res.send()前调用:res.set('Content-Type', 'text/html; charset=utf-8') - Apache 的
.htaccess加:AddDefaultCharset UTF-8
BOM 和 HTTP 响应头这两处最容易被忽略,改完编码和 meta 标签后仍乱码,八成卡在这儿。



















