免费工具 Unicode 编码转换:中文转 Unicode、Unicode 转中文
把中文转成 \u4e2d 这样的 Unicode 转义放进 JSON 或代码,把日志里满屏的 \u652f\u4ed8 还原成中文,或者看清一段文字到底由哪些码点、哪些字节组成。还能全角转半角,揪出让「看着一样的两个值」对不上的零宽字符和不换行空格。
- 7 种转义写法
- 揪出看不见的字符
- 本地处理,不上传
Unicode 转换和逐字查看
示例是一条中文事件名加一个 emoji:emoji 会转成两个 \u(代理对),这是最容易出错的地方。结果下面的表格逐字列出码点和字节。
还原转义时,各种写法可以混在一起。
\u5fae\u4fe1\u652f\u4ed8\u6210\u529f \ud83d\udc4d字符数
8
按 Unicode 码点算,一个 emoji 算 1。
UTF-16 码元
9
JavaScript 里 .length 的值。
UTF-8 字节
23
按 UTF-8 存储或传输时的大小。
不可见字符
0
零宽字符、不换行空格等。
检查结果
逐字查看
还原类模式列的是结果,其它模式列的是输入。只列前 200 个字符。
| 字符 | 码点 | 十进制 | UTF-8 | UTF-16 | 类别 |
|---|---|---|---|---|---|
微 | U+5FAE | 24494 | E5 BE AE | 5FAE | Lo · 其他字母(含汉字) |
信 | U+4FE1 | 20449 | E4 BF A1 | 4FE1 | Lo · 其他字母(含汉字) |
支 | U+652F | 25903 | E6 94 AF | 652F | Lo · 其他字母(含汉字) |
付 | U+4ED8 | 20184 | E4 BB 98 | 4ED8 | Lo · 其他字母(含汉字) |
成 | U+6210 | 25104 | E6 88 90 | 6210 | Lo · 其他字母(含汉字) |
功 | U+529F | 21151 | E5 8A 9F | 529F | Lo · 其他字母(含汉字) |
⟨space⟩ | U+0020 | 32 | 20 | 0020 | Zs · 空格 |
👍 | U+1F44D | 128077 | F0 9F 91 8D | D83D DC4D | So · 其他符号(含 emoji) |
分享这组输入:数值写在链接的 # 后面,不会发到服务器。
https://tapcub.com/zh/tools/unicode-converter
版本 v1.0更新于 更新记录
码点、UTF-16 和 UTF-8
每个字符在 Unicode 里都有一个编号,叫码点。各种转义和编码,只是把这个编号写下来的不同方式。
码点
字符的「身份证号」,「中」是 U+4E2D。Unicode 的码点范围是 U+0000 到 U+10FFFF,共 1,114,112 个位置。表格里给出每个字的码点和类别。
\u 转义和 UTF-16
JavaScript、JSON、Java 的字符串是 UTF-16。U+FFFF 以上的字符(大部分 emoji)要用两个 16 位码元表示,叫代理对,所以 👍 写成 \ud83d\udc4d,.length 也算 2。
UTF-8 字节
网页的标准编码:英文 1 个字节,常见带音标的字母 2 个,汉字 3 个,emoji 4 个。网址百分号编码的、数据库存的,都是这些字节。
看不见的字符
零宽空格、BOM、方向控制符、不换行空格,显示出来要么什么都没有,要么像普通空格。「看着一模一样却对不上」,多半是它们。
两段看起来完全一样的文字,码点可能不同。筛选、关联、查找莫名失败时,把两边的值都粘进来,对比一下逐字表。
三步
按手上有的和想要的选模式。
-
1
选模式
中文转 Unicode 放进代码;Unicode 转中文读日志或 JSON;转 UTF-8 字节;全角转半角;或者清除不可见字符。
-
2
粘贴文字
边输入边出结果。还原转义时,各种写法可以混在一段文字里。
-
3
看逐字表
每个字的码点、字节、类别都列出来;不可见字符会写出名字、标出位置。
同一个字符的五种写法
下表用 Python 的 str.encode 和 json.dumps 核对过。JSON 的 \u 转义是 UTF-16 写法,所以 emoji 要两个。
- UTF-8 每个码点占 1–4 个字节,不编码代理区(RFC 3629)
- 全角英文数字 U+FF01–U+FF5E 正好比对应的半角字符大 0xFEE0;全角空格是 U+3000
- Python 的
json.dumps默认转义非 ASCII(ensure_ascii=True),PHP 的json_encode不加JSON_UNESCAPED_UNICODE也会转,所以接口和日志里常见\u652f\u4ed8 - MySQL 的
utf8(即 utf8mb3)每个字符最多 3 个字节,存 emoji 要用utf8mb4
| 字符 | 码点 | UTF-8 | UTF-16 | JSON / JS |
|---|---|---|---|---|
| A | U+0041 | 41 | 0041 | A |
| é | U+00E9 | C3 A9 | 00E9 | \u00e9 |
| € | U+20AC | E2 82 AC | 20AC | \u20ac |
| 中 | U+4E2D | E4 B8 AD | 4E2D | \u4e2d |
| 1(全角) | U+FF11 | EF BC 91 | FF11 | \uff11 |
| 😀 | U+1F600 | F0 9F 98 80 | D83D DE00 | \ud83d\ude00 |
| (零宽空格) | U+200B | E2 80 8B | 200B | \u200b |
同一个活动,报表里为什么变成了四行
活动名 双11大促 在四个地方打了标签,分别是手打的、从文档复制的、从微信聊天复制的、用全角输入法打的。看着一样,码点却不同。
| 看到的值 | 逐字表显示 | 和「双11大促」相同吗 | 怎么修 |
|---|---|---|---|
双11大促 | 1 是 U+0031 | 相同 | — |
双11大促 | 1 是 U+FF11 全角数字 | 不同 | 全角转半角 |
双11大促 + 零宽空格 | 末尾有 U+200B | 不同 | 清除不可见字符 |
双11 大促 | 中间是 U+00A0 不换行空格 | 不同(多了一个空格) | 清除不可见字符后删掉空格 |
统计工具按值精确比较,每个「变种」都会在活动报表里单独成一行。活动名、事件名尽量用小写英文加下划线(如 double11_sale),手打而不是复制,四种问题都能避开。
Unicode 处理常见的坑
字符本身很少出错,出错的是对字符的假设。
用 .length 数字数
JavaScript 数的是 UTF-16 码元,👍 算 2,国旗 emoji 算 4。字数限制按码点算,存储限制按 UTF-8 字节算。
MySQL 用 utf8 存 emoji
utf8(utf8mb3)每个字最多 3 个字节,4 字节的 emoji 会报错或被截断。用户输入的文字用 utf8mb4。
从文档、聊天里复制值
Word、网页、聊天工具会带上不换行空格和零宽字符。从那里复制来的标签、事件名,和代码里手打的不是同一个值。
还原了两次或少还原一次
\\u4e2d 还原一次得到的是文字 \u4e2d,不是「中」。先看清反斜杠本身有没有被转义过,再决定要不要再还原一次。
名字处处一致,报表才不会拆行
报表按值精确分组。活动名、事件名里藏一个看不见的字符,同一件事就会被拆成好几行,所以要在源头把名字弄干净。
Unicode 编码是什么?中文怎么转 Unicode?
Unicode 给每个字符分配一个编号(码点),「中」是 U+4E2D。所谓「中文转 Unicode」,通常是把汉字写成 \u4e2d 这样的转义。模式选「中文转 Unicode」,再按语言选写法:JavaScript / JSON / Java 用 \uXXXX,Python 和 C 用 \U0001F600 这类,文档里常用 U+XXXX。默认只转非 ASCII 字符。
Unicode 怎么转中文?
模式选「Unicode 转中文」,把 \u652f\u4ed8 这样的内容粘进来就行。\u4e2d、\u{4E2D}、老 JavaScript escape() 产生的 %u4E2D、U+4E2D、HTML 数字实体、\xE4\xB8\xAD 字节写法都能认,混在一起也行。
emoji 为什么变成了两个 \u?
JSON 和 JavaScript 的字符串是 UTF-16,U+FFFF 以上的字符要拆成两个代理码元,所以 😀(U+1F600)写成 \ud83d\ude00。想每个字符一个转义,选 \u{…} 或 Python 写法。
Unicode 和 UTF-8 有什么区别?
Unicode 规定每个字符的编号;UTF-8 是把编号存成字节的一种方式,每个字符 1–4 个字节,汉字一般 3 个。UTF-16 是另一种,用在 JavaScript、Java 和 Windows 内部。GBK 不属于 Unicode 编码,同一个汉字在 GBK 里是 2 个字节。
全角转半角是什么意思?
全角字符是占一个汉字宽度的英文、数字和标点,比如 A、1、,(U+FF01–U+FF5E),多是中文输入法的全角模式打出来的。它们和半角的 A、1、逗号是不同的字符,手机号、邮箱校验和搜索匹配都会因此失败。「全角转半角」把它们统一成半角,可选把中文标点也换掉。
怎么找出并删掉零宽字符?
把文字粘进来:检查结果会列出每种不可见字符的名称、码点和位置,「不可见字符」显示总数。「清除不可见字符」会删掉零宽字符和方向控制符,把不换行空格换成普通空格,同时保留 👨👩👧 这类组合 emoji 里必需的连接符。
我粘贴的内容会被上传吗?
不会,全部在浏览器里处理。分享链接把文字放在网址 # 后面,浏览器不会把这部分发给服务器,但拿到链接的人都能看到。