html字符编码必须严格使用(全大写、带连字符、双引号、置于首行),文件保存为utf-8无bom,且http响应头content-type需一致为text/html; charset=utf-8。

meta charset="UTF-8" 必须写在 最前面
它不是可选标签,而是浏览器解析 HTML 的第一道字符编码指令。只要它没出现在 开头、且在任何 <script></script> 或 <style></style> 之前,就可能被跳过或延迟生效。
常见错误现象:
-
<meta charset="UTF-8">写在<title></title>后面,中文标题仍乱码 - 用了
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,但 HTML5 不推荐这种写法,兼容性差且易被忽略 - 写成
<meta charset="utf8">或<meta charset="UTF_8">—— 浏览器不识别,直接 fallback 到系统默认编码(如 Windows 上是 GBK)
正确写法只有一种:<meta charset="UTF-8">,全大写 UTF-8,带连字符,双引号包裹,放在 第一行(<title></title> 前)。
保存文件时必须选 “UTF-8 without BOM”
VS Code、Sublime Text、Notepad++ 默认保存行为不一致,但最终目标一致:纯 UTF-8 字节流,开头不能有 EF BB BF(BOM)。
为什么 BOM 要避开?
- IE 和部分旧版 Edge 在
file://协议下会把 BOM 当作不可见字符,导致<meta charset>不在文档最开头,失效 - 某些构建工具(如 Webpack、Vite)读取 HTML 模板时,BOM 可能干扰字符串匹配或注入逻辑
- Nginx/Apache 不处理 BOM,但后端模板引擎(如 EJS、Pug)可能报错或渲染异常
实操建议:
- VS Code:右下角点击编码显示(如 “UTF-8”),选 “Save with Encoding” → “UTF-8”(不是 “UTF-8 with BOM”)
- Notepad++:菜单栏 “编码” → “转为 UTF-8 无 BOM 格式” → 保存
- Sublime Text:File → Save with Encoding → UTF-8
验证是否成功:用十六进制编辑器(如 HxD)打开文件,看前 3 字节是不是 EF BB BF;如果不是,且中文正常显示,说明已清除 BOM。
HTTP 响应头 Content-Type 必须和 meta 一致
本地双击打开 HTML 文件(file://)时,浏览器只认 <meta charset>;但一旦走 HTTP(localhost 或线上),服务器返回的 Content-Type 头优先级更高。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
典型冲突场景:
- Nginx 配置漏了
charset utf-8;,返回头是Content-Type: text/html(无 charset),浏览器按默认编码(GBK)解码,<meta>被无视 - Express 中写了
res.set('Content-Type', 'text/html'),但没加; charset=utf-8 - Apache 的
.htaccess里用了AddDefaultCharset Off,又没显式设 charset
检查方法:F12 → Network → 刷新 → 点 index.html → 查看 Response Headers 中的 Content-Type 值。必须是 text/html; charset=UTF-8(注意大小写和分号)。
快速修复:
- Nginx:
location / { charset utf-8; } - Express:
res.set('Content-Type', 'text/html; charset=UTF-8');(务必在res.send()前) - Apache:
AddDefaultCharset UTF-8加到.htaccess或虚拟主机配置
编辑器自动识别失败时,手动指定编码再重开
VS Code 打开一个老项目 HTML 文件,右下角显示 “GBK”,点一下改成 “UTF-8” 并保存,不代表文件真被转码了——只是编辑器临时用 UTF-8 解释字节,保存时仍按原编码写回。
真正转码要两步:
- 先用当前识别出的编码(如 GBK)正确读取内容 → 复制全部文本
- 新建空白文件 → 右下角设为 “UTF-8” → 粘贴 → 保存
或者用命令行一步到位(Linux/macOS):
iconv -f GBK -t UTF-8 input.html > output.html
Windows 用户可用 Notepad++:打开文件 → 编码 → 转为 UTF-8 无 BOM 格式 → 保存。别跳过“转为”这步,直接“另存为 UTF-8”可能保留原字节序列,无效。
最容易被忽略的一点:HTML 文件名本身不能含非 ASCII 字符(比如 测试.html)。某些 Windows 版本和老旧服务器会把文件名 URL 编码失败,导致整个请求 404 或返回空内容。坚持用英文+数字+短横线命名。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










