UTF-8容易踩的坑

27 0

UTF-8 是 Unicode 最常用的存储编码,用 1–4 个字节表示一个字符:ASCII 字符 1 字节,拉丁字母扩展 2 字节,常用汉字 3 字节,emoji 等 4 字节。下面重点说明误区与规避。

UTF-8容易踩的坑

  • MySQL 的 utf8 实际是 3 字节的 utf8mb3,存 emoji 会报错,应使用 utf8mb4
  • Windows 记事本旧版本保存的“UTF-8”带 BOM,可能导致 PHP 输出多余字符、shell 脚本报错
  • 按字节截断 UTF-8 字符串会切断汉字,产生乱码
  • 同一个文件不要混用 UTF-8 和 GBK

示例

输入:https://www.123wen.cn/?q=测试

编码结果:

68 74 74 70 73 3A 2F 2F 77 77 77 2E 31 32 33 77 65 6E 2E 63 6E 2F 3F 71 3D E6 B5 8B E8 AF 95

说明:按 UTF-8 共 31 字节。

工作原理

编码时根据码点大小选择字节数,把码点的二进制位依次填进字节格式的 x 位。例如“中”U+4E2D 的二进制是 0100 1110 0010 1101,填入 3 字节格式得到 11100100 10111000 10101101,即 E4 B8 AD。解码时看首字节的前导 1 的个数就知道这个字符占几个字节。

中文的处理

常用汉字在 UTF-8 中都是 3 字节,首字节在 E4–E9 之间:“中”E4 B8 AD,“文”E6 96 87,“问”E9 97 AE。中文标点(,。“”)也是 3 字节。

本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【什么是 BOM?】文件开头的 EF BB BF 三个字节,用来标记 UTF-8。网页和脚本文件建议不加。

【“中文”是什么乱码?】UTF-8 编码的“中文”被按 Latin-1/Windows-1252 解读的结果。

【UTF-8 能表示所有汉字吗?】能,包括所有 CJK 扩展区汉字。

文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: UTF-8 数码开发

抱歉,评论功能暂时关闭!