为什么我的网页会出现乱码?
乱码是 Web 开发中最令人头疼的问题之一。它通常发生在 读取字节序列时使用了错误的解码方案 。 要彻底解决乱码,必须理解 Unicode 和 UTF-8 之间的关系。
🚨 场景 1:数据库存入正常,读取出来是“??”或“锟斤拷”
原因分析: “锟斤拷”是由于 UTF-8 编码的字符被错误地用 GBK 解码,然后再转回 UTF-8 导致的。 通过本工具,你可以输入原本的文字,查看它在 UTF-8 下真实的十六进制字节。 如果数据库中存的字节与此不符,说明在 写入阶段 就已经发生了编码转换错误。
🚨 场景 2:Emoji 表情导致后端报错或截断
原因分析: 传统的 MySQL `utf8` 编码其实只能存储最多 3 字节的字符,而像 🌍 (U+1F30D) 这样的 Emoji 在 UTF-8 下需要 4 字节。 使用本工具分析 Emoji,你会发现它的 UTF-8 序列是 4 组十六进制数。这提醒你必须将数据库编码改为 `utf8mb4`。
核心术语科普
- Unicode :一套标准,为世界上几乎所有字符分配了一个唯一的数字(称为“码点”,如 U+4E2D)。
- UTF-8 :一种变长的编码实现。它使用 1 到 4 个字节来表示一个码点。它是目前互联网上最通用的编码。
- UTF-16 :JavaScript 引擎内部使用的编码方式。普通字符占 2 字节,特殊字符(如 Emoji)占 4 字节(代理对)。
如何使用本工具进行调试?
- 在上方框内输入你怀疑有问题的字符。
- 在下表中观察其 **UTF-8 十六进制** 序列。
- 对比你的后端日志、数据库原始二进制数据或抓包结果中的十六进制,寻找不一致的地方。