UTF-8 字节与编码对照
编码所有处理都在浏览器本地完成,数据不上传服务器
把一段文字的各种表示并排列出来:UTF-8 字节、Unicode 码点、URL 用的百分号编码、HTML 实体(十进制与十六进制)、JS / Java 的 `\u` 转义。它不是一个转换器 —— 单独要做某一种转换,站内有更专的工具(URL 编码、HTML 实体、Unicode 转义),这里解决的是另一个问题:同一个字符的几种写法摆在一起对照。调试报文、读别人的配置、排查「为什么这个中文在那边显示成乱码」时,需要同时看到这几栏。最后一行特意把字符数和字节数分开写:这两个数字不相等,就是 UTF-8 在起作用 —— 一个汉字占 3 字节、一个 emoji 占 4 字节,而 ASCII 只占 1 字节。
功能
- 一次给出六种表示:字节、码点、百分号编码、两种 HTML 实体、Unicode 转义
- 每行可单独复制 —— 不用从一长串里手划选中某一段
- 按码点切分,emoji 不会被劈成两个孤立的代理项
- 基本平面之外的字符会写成代理对(\ud83d\ude00),能直接粘进配置文件
- 字符数与字节数分开统计 —— 一眼看出 UTF-8 的膨胀
- 全部在浏览器本地完成,内容不会上传
使用方法
- 把文字粘贴进输入框
- 结果实时出现,每种表示各占一行
- 点某一行的复制按钮取走那一个值
- 需要整段时点「复制全部」
常见问题
- 为什么字符数和字节数不一样?
- 因为 UTF-8 是变长编码:ASCII 字符(英文、数字、标点)占 1 字节,拉丁扩展与希腊文占 2 字节,汉字等占 3 字节,emoji 和生僻字占 4 字节。所以「你好」是 2 个字符、6 个字节;「a中😀」是 3 个字符、8 个字节。数据库里 `varchar(10)` 是按字符算的,存 10 个汉字没问题;但如果字段是 `varchar(10 bytes)` 或按字节截断,就只能装下 3 个汉字 —— 这类问题的根源都在这一行。
- 这和 URL 编码工具有什么区别?
- 百分号编码这一行和它是一样的,但定位不同:`url-encode` 是转换器,带着「哪些字符需要编码」「空格用 + 还是 %20」这些选项,输出就是结果本身;这里是对照表,把同一份内容的六种写法一次列全,方便横向比较。要做转换请用专门的工具,要「看清这串东西到底是什么」用这里。
- emoji 的转义为什么是两段?
- 因为 😀 的码点 U+1F600 超出了基本多文种平面(U+FFFF 以上),而 JavaScript、Java 用的 UTF-16 里一个码元只有 16 位,装不下它 —— 所以必须写成一对代理项 `\ud83d\ude00`。另有 `\u{1F600}` 这种写法更短,但 Java 的 properties 文件、老 JSON 解析器和不少模板引擎都不认。本工具选择输出代理对,因为「粘进配置文件里能用」是这里最常见的用途。
- HTML 实体为什么有两种?
- 十进制 `中` 和十六进制 `中` 指的是同一个字符,浏览器都认。区别只在习惯:网页源码里两种都常见,而某些老编辑器或模板引擎只认其中一种。两种都列出来,省得你为了迁就某个工具再转一次。
相关工具
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
Unicode 转义
编码把中文、emoji 这类非 ASCII 字符转成 \uXXXX、\xXX 或 &#xXXXX; 的转义写法,也能还原回来。全部在浏览器本地完成,不上传。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
JWT 解析与验签
编码把 JWT 拆成 header、payload、signature,支持用密钥验证 HS256/384/512 签名,并把 exp、nbf 换算成可读时间。全部在浏览器本地完成。
文件转 Base64
编码拖入任意文件即可得到 Base64 与可直接粘进 src / url() 的 data URL,并列出 MIME、体积与编码后的长度。文件不上传。