必须置于内最前端,紧贴标签,且须在等任何其他标签之前;否则浏览器无法正确解析中文等非ascii字符。

HTML里charset写在哪儿才生效
必须放在 里,且越靠前越好——最好紧贴 开始标签,不能晚于任何 <meta> 以外的标签(比如 <title></title> 或 <script></script>)。浏览器解析到第一个 <meta charset> 就立即切换编码,后面再声明也无效。
常见错误现象:<meta charset="UTF-8"> 放在 <title></title> 后面,中文标题仍乱码;或者整个 <meta> 标签被误写成自闭合形式 <meta charset="UTF-8">(XHTML 风格),在部分旧浏览器中不被识别。
- 正确位置:
<meta charset="UTF-8"> <title>...</title> - 不要用
http-equiv="Content-Type"写法(<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">),冗余且易出错 - 如果用了
<meta name="viewport">,它必须排在<meta charset>后面,顺序不能颠倒
为什么用UTF-8而不是GBK或ISO-8859-1
UTF-8 是唯一能无损表示所有 Unicode 字符的通用编码,而 GBK 只支持中文及部分东亚字符,ISO-8859-1 根本不支持中文。一旦页面含 emoji、多语言混排、用户输入内容不确定来源,选错编码就会直接触发乱码或截断。
性能和兼容性影响:UTF-8 对 ASCII 字符(英文、数字、标点)完全兼容,单字节存储;对中文是三字节,但现代浏览器解析极快,不存在性能瓶颈。反而是 GBK 在跨平台传输、服务端处理、CDN 缓存时容易因环境默认编码不一致导致二次转码失败。
立即学习“前端免费学习笔记(深入)”;
- 服务端响应头里也得配
Content-Type: text/html; charset=utf-8,和 HTML 里的<meta charset>保持一致 - 编辑器保存文件时必须选 “UTF-8 无 BOM”,带 BOM 的 UTF-8 会在页面开头插入不可见字符,可能破坏 DOCTYPE 声明或引发 CSS/JS 解析异常
浏览器没按charset解析?先查这三处
即使写了 <meta charset="UTF-8">,页面仍乱码,大概率不是声明本身的问题,而是底层传输或编辑环节被覆盖了。
常见错误现象:本地打开 HTML 文件正常,上传到服务器后乱码;或者 PHP/Node.js 模板里动态插入内容,结果部分区域还是问号。
- 检查 HTTP 响应头是否返回了冲突的
charset(比如 Nginx 默认发charset ISO-8859-1),用浏览器开发者工具的 Network → Response Headers 确认 - 确认 HTML 文件本身保存编码确实是 UTF-8(VS Code 右下角显示“UTF-8”,Sublime Text 查看 File → Reopen with Encoding → UTF-8)
- 服务端模板(如 EJS、Twig)输出前是否做了强制转码?例如 PHP 中
mb_convert_encoding($str, 'UTF-8', 'GBK')漏掉会导致局部乱码
script标签里的字符串编码要不要单独处理
不用。只要 HTML 整体声明了 <meta charset="UTF-8">,内联 <script></script> 和外部 JS 文件(前提是文件本身也是 UTF-8 编码)里的字符串字面量都会按该编码解析。
容易踩的坑:用 fetch 或 XMLHttpRequest 加载 JSON 或文本时,响应体编码由服务端 Content-Type 头决定,跟 HTML 的 charset 无关。比如接口返回 Content-Type: application/json; charset=GBK,JS 解析出来就是乱码。
- 外部 JS 文件需确保保存为 UTF-8,且 HTTP 响应头包含
charset=utf-8(如Content-Type: application/javascript; charset=utf-8) -
<script src="xxx.js"></script>不需要也不支持加charset属性(HTML5 已废弃该属性) - JSON 接口务必统一用 UTF-8,避免前端手动
decodeURIComponent(escape())补救——那是掩盖问题,不是解决问题
<meta charset>,而是从编辑器保存、服务端响应、HTTP 传输到浏览器解析,整条链路上任意一环悄悄换了编码,你都得顺藤摸瓜找过去。











