UTF-8 是 Unicode 最常用的存储编码,用 1–4 个字节表示一个字符:ASCII 字符 1 字节,拉丁字母扩展 2 字节,常用汉字 3 字节,emoji 等 4 字节。下面重点说明函数与示例。
用 PHP 处理 UTF-8
下面是 PHP 中处理UTF-8的常用写法:
strlen("123问"); // 6(字节数)
mb_strlen("123问", "UTF-8"); // 4(字符数)
mb_convert_encoding($s, "UTF-8", "GBK");运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
示例
输入:a+b=c
编码结果:61 2B 62 3D 63
说明:按 UTF-8 共 5 字节。
规则说明
- 首字节前导 1 的个数表示总字节数,后续字节都以 10 开头
- 同一个码点只能用最短形式编码(过长编码是非法的)
- U+D800–U+DFFF 代理项码点不能出现在 UTF-8 中
- BOM 不是必需的,Linux 和网页通常不加
常见报错
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6:文件实际是 GBK
- Incorrect string value: '\xF0\x9F\x98\x80'(MySQL):字段是 utf8,改为 utf8mb4
- 页面显示“锟斤拷”:GBK 与 UTF-8 来回错误转换,替换字符 EF BF BD 被按 GBK 显示
- PHP 输出前多了空白:文件带 BOM
本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【“䏿–‡”是什么乱码?】UTF-8 编码的“中文”被按 Latin-1/Windows-1252 解读的结果。
【UTF-8 能表示所有汉字吗?】能,包括所有 CJK 扩展区汉字。
【一个汉字在 UTF-8 中占几个字节?】常用汉字 3 个字节;扩展 B 区及以后的生僻字 4 个字节。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。