UTF-8编码分析
文本与 UTF-8 字节序列互转:逐字符显示码点(U+XXXX)与十六进制 / 十进制 / 二进制三种字节视图,也可把字节序列解回文本,非法字节序列会直接报错。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
编码结果
在上方输入内容即可查看结果
这个工具能做什么
- 排查中文乱码:看到某个字符的 UTF-8 字节,反推它到底被按什么编码读成了乱码。
- 手写十六进制或转义串时核对字节:中文是 3 字节、Emoji 是 4 字节,一眼看出长度对不对。
- 把字节序列解回文本:粘贴 E4 B8 AD 或 228 184 173 就能还原成「中」,并逐字节显示十六进制 / 十进制 / 二进制。
- 解释 JavaScript 的字符串长度问题:看清一个字符占几个码点、几个 UTF-16 码元和几个字节,搞明白为什么 emoji 的 length 是 2。
示例
输入
中文 A 🎉
输出
码点数量:6 字节数:13 十六进制视图:E4 B8 AD E6 96 87 20 41 20 F0 9F 8E 89 逐字符明细:中 U+4E2D = E4 B8 AD;文 U+6587 = E6 96 87;空格 U+0020 = 20;A U+0041 = 41;空格 U+0020 = 20;🎉 U+1F389 = F0 9F 8E 89
这是「文本 → 字节」方向的结果:两个汉字各 3 字节、空格和 A 各 1 字节、🎉 占 4 字节,合计 13 字节但只有 6 个码点。反过来在「字节 → 文本」里粘贴 E4 B8 AD 也能还原出「中」。
常见问题
为什么「字节数」比「码点数量」大这么多?
UTF-8 是变长编码:ASCII 1 字节、拉丁扩展与常用符号 2 字节、汉字等 3 字节、Emoji 等增补平面字符 4 字节。所以一段中文文本的字节数通常是字符数的 3 倍,做字段长度校验时要按字节算。
字节序列的三种进制怎么输入?
十六进制可以写 E4 B8 AD、e4b8ad、0xE4,0xB8 或 E4-B8-AD;十进制写 228 184 173(每项 0–255);二进制写 11100100 10111000(每项 1–8 位)。分隔符支持空格、逗号、分号、冒号、竖线和短横。
为什么解码会报「不是合法的 UTF-8 字节序列」?
解码用的是严格模式(TextDecoder fatal),过长编码(overlong)、代理区码点(U+D800–U+DFFF)和截断的多字节序列都会被拒绝。这通常说明原始字节不是 UTF-8,比如是 GBK 或 Latin-1,需要用对应的编码解码。
文本里有落单的代理项会怎样?
比如只截了一半的 emoji,字符串里会留下一个未配对的 U+D83C 之类。UTF-8 无法表示这种码元,TextEncoder 会把它替换成 U+FFFD(),页面会给出提示,字节数也按替换后的结果计算。
和「Unicode 字符表」有什么区别?
字符表偏查询单个码点的属性(类别、HTML 实体、JS 转义、所属区段),需要点选或搜索;这个工具偏整段文本的字节视图,输入多少就列出多少,还能反向把字节还原成文本。两者都不联网,数据只在本地处理。
关键词:utf8utf-8encodedecodehexcode pointunicodeUTF-8 编码字节序列码点十六进制字符编码