Unicode/字符编码对照表
输入一个字符,即可对照查看其Unicode码点、UTF-8字节序列,以及JavaScript/HTML/URL/CSS转义表示形式的免费工具。全部在浏览器内完成。
常见字符编码对照表
| 字符 | 码点 | UTF-8 | 备注 |
|---|---|---|---|
| A | U+0041 | 41 | 大写字母(ASCII,1字节) |
| 0 | U+0030 | 30 | 数字(ASCII,1字节) |
| ␣ | U+0020 | 20 | 半角空格(ASCII,1字节) |
| ! | U+0021 | 21 | 感叹号(ASCII符号,1字节) |
| @ | U+0040 | 40 | “at”符号(ASCII符号,1字节) |
| © | U+00A9 | C2 A9 | 版权符号(Latin-1补充区,2字节) |
| € | U+20AC | E2 82 AC | 欧元符号(3字节) |
| → | U+2192 | E2 86 92 | 向右箭头(箭头区块,3字节) |
| あ | U+3042 | E3 81 82 | 日语平假名(3字节) |
| 漢 | U+6F22 | E6 BC A2 | CJK统一表意文字(3字节) |
| 한 | U+D55C | ED 95 9C | 韩文谚文音节(3字节) |
| 😀 | U+1F600 | F0 9F 98 80 | 表情符号(超出基本多文种平面,4字节,在JS中以代理对表示) |
这个Unicode字符编码转换工具能做什么
本工具接收你输入的任意字符,同时并列显示七种编码表示:Unicode码点、UTF-8字节序列、JavaScript转义、HTML实体(十进制和十六进制)、URL百分号编码,以及CSS转义。从字符到码点、再从码点到各种字节级表示的每一步转换,都会在你输入时立即在浏览器内完成计算,不会向服务器发送任何数据。
有一点需要了解:许多表情符号的码点位于Unicode基本多文种平面(BMP,U+0000至U+FFFF)之外,因此JavaScript字符串在内部会用一对代理对来表示它们,也就是两个16位代码单元而非一个。本工具内部使用`codePointAt`,确保代理对总能被正确还原为单一码点,因此表情符号能得到准确的结果,而不是两个独立的半字符。如果输入多个字符,每个字符都会显示各自的结果区块。
这个Unicode转换工具的使用方法
- 输入要查询的字符 在输入框中输入任意字母、符号或表情符号,也可以一次粘贴多个字符。
- 查看每个字符的结果区块 每输入一个字符都会出现一张独立的卡片,展示全部七种编码表示。
- 找到需要的表示形式 在各行中查找与你的任务相关的格式,例如码点、UTF-8字节、JavaScript转义等。
- 用复制按钮获取数值 点击某一行旁的复制按钮,即可只将该数值复制到剪贴板,方便直接粘贴到代码中。
- 尝试其他字符 修改输入框内容,或点击“清除”重新开始,然后输入下一个要查询的字符。
用好本工具的小技巧
- 输入框可以输入多个字符,此时会在输入框下方分别显示每个字符对应的结果区块。
- 像😀这样的表情符号超出了Unicode的基本多文种平面(BMP,U+0000至U+FFFF),因此JavaScript字符串内部会用两个代码单元(代理对)来表示它,这就是“JavaScript转义”一行会显示两个`\uXXXX`的原因。
- CSS转义(如`\41`)直接书写码点的十六进制数字且不加前缀,如果紧随其后的字符可能被误读为十六进制数字的一部分,建议在末尾加一个空格。
- 浏览器会将十进制(
A)和十六进制(A)的HTML实体视为相同结果,可根据标记习惯任选其一。 - 每一行都有复制按钮,可直接将该值复制到剪贴板,方便粘贴到代码或CSS中使用。
适用场景
排查乱码原因
当程序或数据库显示出意料之外的字符时,对比实际的码点与UTF-8字节,有助于判断是否是编码不一致导致的。
查看表情符号的编码方式
一眼看出某个表情符号在JavaScript中作为代理对需要几个代码单元,在UTF-8中又占用多少字节。
确认数据库的字符编码
当需要事先了解某个字符会占用多少字节时可以使用,例如判断MySQL的列是否需要使用utf8mb4。
在HTML或CSS中嵌入特殊字符
想把符号或外语字符以HTML实体或CSS转义的形式直接写入代码时,可以直接复制正确的写法使用。
验证URL编码是否正确
将实际转换结果与预期对照,确认包含中文或符号的查询参数是否被正确进行了百分号编码。
术语表
- Unicode
- 为全世界每一个字符分配唯一编号(码点)的国际字符编码标准,旨在防止不同语言之间出现乱码。
- 码点
- Unicode为每个字符分配的编号,写作
U+0041这样的形式,即“U+”前缀后跟十六进制数字,是唯一标识某个字符的编号。 - UTF-8
- 一种将Unicode码点在计算机中存储或传输为字节的具体编码方案。每个字符使用1到4个可变长度字节表示,且与ASCII完全兼容,因此在网络上占据主流地位。
- UTF-16
- 一种以16位为单位(代码单元)表示Unicode码点的编码方案。JavaScript字符串内部就采用这种编码。
- 代理对
- UTF-16中用来表示超出基本多文种平面(BMP)的码点时,所使用的两个代码单元的组合。大多数表情符号都需要用代理对表示。
- BMP(基本多文种平面)
- Unicode码点空间中U+0000至U+FFFF的范围。该范围内的字符在UTF-16中只需一个代码单元即可表示。
- HTML实体
- 在HTML文档中安全书写特殊字符的方式,例如
A(十进制)或A(十六进制)。 - 百分号编码
- 将URL中不允许出现的字符转换为UTF-8字节,并将每个字节写成
%XX形式的编码方式,常用于URL中包含非ASCII文本的情况。
常见问题
A(十进制)或A(十六进制,带`x`前缀),且只能在HTML标记中使用。CSS转义的写法是`\41`——只写十六进制数字,不加`U+`或`x`前缀——用于CSS选择器或属性值中。需要根据使用场景选择正确的格式。
闲话 ― Unicode如何统一了四分五裂的字符编码世界
在Unicode出现之前,不同国家甚至不同语言的计算机字符编码方式千差万别。仅日文文本就存在Shift_JIS、EUC-JP、JIS编码等多种并存的方案,在使用不同编码的系统之间交换文本时经常出现乱码。1991年发布的Unicode 1.0,正是为了解决这一混乱局面,为世界上每一种语言使用的每一个字符分配唯一的编号(码点)。
Unicode与ISO/IEC 10646这一国际标准最初是各自独立制定的,但后来两者协调一致,共享相同的字符集合与码点分配。如今Unicode已收录超过15万个字符(包括表情符号),并且每年都会发布新版本继续添加新字符。
UTF-8由Ken Thompson和Rob Pike于1992年设计,其突破性在于既能与纯ASCII文本完全向后兼容,又能表示Unicode中的所有字符——这一设计恰好契合了互联网的需求,此后UTF-8已成为互联网文档事实上的标准编码。