Unicode 转换
Unicode 转换是免费在线工具:把中文、emoji、符号一键转成 \u4e2d 这类转义码,也能把 \u4e2d、中、U+4E2D、%u4E2D 等 10 种写法混排的文本一次还原成中文,emoji 代理对自动合并。可只转非 ASCII、只转汉字或只揪出零宽空格这类不可见字符,并查看码点与 UTF-8 字节。解不开的片段原样保留,绝不用问号糊过去。浏览器本地计算、文本不上传。
🔒 全部转换在你的浏览器本地用 JS 完成,文本不上传任何服务器,也不写入本地存储(只记住方向、 写法、范围这些参数偏好),关闭页面即清除。本工具只在「字符」与「它的转义写法」之间互转: 不改宽度、不改大小写、不删空白、不动换行符、不做 NFC/NFD 归一,解不开的片段一律原样保留。
如何使用Unicode 转换
Unicode 转换怎么用:把要处理的文本粘进上方输入框,或直接拖入 .txt / .json / .log 文件(文本只在你的浏览器里处理、不上传)。不确定怎么开始就点「填入示例」先看效果。
选方向和写法:默认就是「JSON 中文转义」预设,即文字转 \uXXXX、只转非 ASCII,英文与 JSON 结构原样可读。要还原就点「一键还原中文」,10 种写法混排也能一次认全;也可以自己在下拉里挑写法(\u{}、&#x、U+、%u…)和范围(全部字符 / 只转汉字 / 只转不可见字符)。
拿结果:统计条会直接告诉你转了多少个字符、有没有解不开的片段;结果可一键复制或下载 .txt(可选带 BOM,Windows 记事本打开不乱码)。「字符档案」里能顺手查每个字符的码点、UTF-8 字节与 10 种写法,可整表复制成 TSV。
关于Unicode 转换的常见问题
- Unicode 转换会上传我粘贴的文字吗?
- 不会,Unicode 在线转换不上传任何内容。所有转换都在你的浏览器里用 JavaScript 完成,粘贴的文本、上传的文件内容与转换结果都不会发送到任何服务器,关闭页面即清除。本页只把方向、写法、范围这几项参数偏好写进本机 localStorage,原文与结果一个字都不落盘,也不会把文本同步到网址里。想自证很简单:打开 F12 的网络面板再转一次,计算过程零请求,断开网络照样出结果(页面本身会加载一个访问统计脚本,它不读取也不上报你粘贴的内容)。
- \u4e2d 是什么意思?怎么转成中文?
- \u4e2d 是一个 Unicode 转义序列:反斜杠 u 后面的 4e2d 是十六进制写的码点,对应的字符正是汉字「中」。它常出现在 JSON、Java 源码、日志和接口返回里,因为这些地方只想存 ASCII 字符。要还原,把整段文本粘进本页、点「一键还原中文」即可,\u4e2d、\u{1f600}、文、U+4E00、%u5b57 混在一起也能同时认出来,其余字符原样不动。
- Python 的中文变成 \u5b57 了怎么还原?
- 那是 json.dumps 的默认参数 ensure_ascii=True 造成的:它把所有非 ASCII 字符都写成 \uXXXX 转义,JSON 本身没有损坏,中文也没有丢,只是换了种写法。要在代码里避免,把参数改成 ensure_ascii=False 即可;要还原手上已有的文件或日志,把内容粘进本页选「一键还原中文」,一次全部转回来。反过来,如果你需要生成这种「纯 ASCII 的 JSON」交给只认 ASCII 的老系统,用本页默认的「JSON 中文转义」预设就是同一个口径。
- emoji 转 \u 编码为什么变成两段代理对?
- 因为 \uXXXX 写的是 UTF-16 码元,只能表示到 U+FFFF。😀 的码点是 U+1F600,超出了这个范围,就必须拆成「代理对」两段码元来写,页面上方的对照表里那一行给的就是它,这是规范行为不是工具出错。想要一段的写法,选 \u{1f600}(ES6 / Rust / Swift)或 \U0001f600(Python / C),它们写的是码点而不是码元。本页解码时会自动把两段代理合并回一个 emoji;如果只出现了半个(比如日志被从代理对中间截断),本页会原样保留并在问题列表里点名,绝不会悄悄变成问号。
- U+4E2D 和 \u4e2d、中 有什么区别?
- 三者指的是同一个字符「中」,区别只在写法出处:U+4E2D 是 Unicode 标准与文档里的记法,\u4e2d 是 JS / Java / JSON 源码里的转义,中 是 HTML / XML 的数值字符引用。选哪种取决于你要把它贴到哪里——贴进源码用 \u,贴进网页用 &#x,写文档提 issue 用 U+。本页正文的对照表把 10 种写法并排列出,同一个「中」和同一个 😀 各给一列,照着挑就行。
- %u4E2D 和 %E4%B8%AD 有什么区别?
- 长得像,但完全是两回事。%u4E2D 是旧式 JavaScript escape() 留下的写法,百分号后面跟的是 UTF-16 码元;%E4%B8%AD 是 URL 百分号编码,跟的是 UTF-8 字节,一个汉字三段。本页只处理前者,遇到后者会明确提示并指向「URL 编码/解码」工具,而不会给你一个看起来解开了其实全错的结果——把 %E4%B8%AD 按码元硬解会得到 ä¸ 这种乱码,比直接报错危险得多。
- 怎么查一个汉字的 Unicode 码点和字节?
- 把字符粘进输入框,下方的「字符档案」会逐字给出码点(如 U+4E2D)、十进制(20013)、UTF-8 字节(E4 B8 AD)、UTF-16 码元(4E2D)、所在平面与常用区块名,以及这个字符在 10 种记法下分别怎么写。整表可以复制成 TSV 直接贴进 Excel。档案按首次出现顺序去重,默认只对前 200 个不重复字符建档,所以粘一整篇文章也不会卡。
- 字符串看起来一样却不相等,怎么用 Unicode 查?
- 多半是中间藏了看不见的字符。用「揪出不可见字符」预设:零宽空格、零宽连接符、不换行空格、方向控制符、变体选择符会被转成 \u200b、\u00a0 这样的写法显形出来,一眼就能看到多出来的是什么、在第几行第几列,而中文和英文一个字都不会动。本页只让它们现形、不替你删;要清掉请用「富文本清理」。这也是从网页或 PDF 复制来的字符串在 Excel 里查不到、在代码里匹配不上的头号原因。
- Unicode 转换和 JSON 转义、URL 编码的区别?
- 层次不同,同一段中文在四个工具里会得到四种完全不同的结果。本页处理的是「字符与它的码点写法」;JSON 格式化里的转义处理的是引号、反斜杠与控制字符的语法安全,它不会动中文;URL 编码把 UTF-8 字节写成 %E4%B8%AD;Base64 把任意字节重编成 64 个 ASCII 字符。四个工具各自独立、可以按需组合,本页只管码点这一层,绝不越界替你做另外三件事。
- Unicode 转换能只转中文、保留英文吗?
- 可以,这正是默认行为。「只转非 ASCII」会保留全部英文字母、数字和半角标点,只把中文、日韩文、emoji、全角标点转成转义码,所以 JSON 的结构、键名和缩进依然清清楚楚。想更精确还能选「只转汉字」(标点和 emoji 保持可读)或「只转不可见字符」;真要逐字转就选「全部字符」,此时真实换行默认仍然保留,可以手动关掉换成 \u000a。
- Unicode 在线转换有字数限制吗?免费吗?
- 完全免费、无需注册、不限次数。建议单次 10 MB 或 500 万字以内;超过 20 万字会自动切换成「点按钮 + 进度条 + 可随时取消」的分片计算模式,避免长文本把页面卡住;真的超过 500 万字上限会明确告诉你已处理到哪里,不会静默丢内容。结果超过 5000 行时文本框只渲染前 5000 行做预览,但复制和下载拿到的始终是完整数据。
- Unicode 解不开的片段会变成问号吗?
- 不会,这是本工具的一条硬规矩。孤立的半个代理(emoji 转义被从中间截断只剩前一半)、超出 U+10FFFF 的码点、缺结尾分号的实体、& 这类命名实体、%XX 形式的 URL 编码、\q 这类未知转义,一律原样保留,并在「解不开的片段」列表里给出行号、列号、原文与原因。绝不会用 � 替换字符把错误糊过去——那会让你拿着一段悄悄坏掉的文本走,比报错糟得多。
Unicode 转换:同一个字的 10 种写法对照表
这十种写法覆盖的就是大家常说的那几件事:中文转 \u 编码与 \u 转中文(\u4e2d 与「中」互换)、u+ 编码转换(U+4E2D 这种 标准写法)、字符转 Unicode 码,以及反过来的 Unicode 码点查询。换个方向就是换一栏, 不用换页。
「Unicode 转换」之所以让人困惑,是因为同一个字符在不同语言里有完全不同的写法,而它们 指的其实是同一个码点。下面这张表用汉字「中」(码点 U+4E2D)和 emoji「😀」(码点 U+1F600)各走一遍 10 种记法——注意看 😀 那一列,有的记法一段就够,有的必须写成两段。
| 写法 | 中(U+4E2D) | 😀(U+1F600) | 典型出处 |
|---|---|---|---|
| \uXXXX | \u4e2d | \ud83d\ude00 | JavaScript / Java / JSON / C# / Go |
| \u{X…} | \u{4e2d} | \u{1f600} | ES6+ / Rust / Swift / PHP7+ |
| \uXXXX + \U00XXXXXX | \u4e2d | \U0001f600 | Python / C / C++ |
| &#十进制; | 中 | 😀 | HTML / XML |
| &#x十六进制; | 中 | 😀 | HTML / XML |
| \十六进制 + 一个空格 | \4e2d | \1f600 | CSS content |
| %uXXXX | %u4E2D | %uD83D%uDE00 | escape() / ASP / VBScript |
| U+XXXX | U+4E2D | U+1F600 | Unicode 标准 / 文档 / Wiki |
| 十进制数字 | 20013 | 128512 | 数据库 / 日志 |
| 0x十六进制 | 0x4e2d | 0x1f600 | C / 调试器 |
表里两处最容易被当成 bug 的地方,其实都是规范要求的:一是 CSS 那行末尾多出来的空格, 它是转义序列的终止符,删掉之后后面紧跟的十六进制字符会被吞进转义里;二是 %uXXXX 与 U+XXXX 恒用大写,前者是浏览器 escape() 的原样输出,后者是 Unicode 标准的写法,所以 本页的「十六进制用大写」开关对这两种记法不起作用。
码点、UTF-8、UTF-16 到底是什么关系
这一节顺带回答三个常被单独搜的问题:UTF-8 字节查询(一个汉字在 UTF-8 下是哪三个字节)、 emoji unicode 码为什么要两个 UTF-16 码元,以及什么叫孤立代理对——一个高位代理没等到 它的低位搭档,字符串就断在半路。英文资料里这类工具叫 utf16 code unit converter。
这一段能解释本页 90% 的困惑。码点是字符的身份证号:「中」就是 U+4E2D,全世界只有一个,和存储方式无关。UTF-8 是把码点存成字节的一种方案:「中」在 UTF-8 下是 E4 B8 AD 三个字节。UTF-16 是另一种方案:「中」 在 UTF-16 下是 4E2D 一个码元。三者说的是同一个字符的三种身份。
| 字符 | 码点 | 十进制 | UTF-8 字节 | UTF-16 码元 | \uXXXX 写法 |
|---|---|---|---|---|---|
| 中 | U+4E2D | 20013 | E4 B8 AD | 4E2D | \u4e2d |
| 文 | U+6587 | 25991 | E6 96 87 | 6587 | \u6587 |
| A | U+0041 | 65 | 41 | 0041 | \u0041 |
| 😀 | U+1F600 | 128512 | F0 9F 98 80 | D83D DE00 | \ud83d\ude00 |
关键在最后一行:\uXXXX 写的是 UTF-16 码元,不是码点。码元只有 16 位, 最大表示到 U+FFFF,而 😀 的码点是 U+1F600,装不下,于是 UTF-16 用两个特殊范围的码元 (D800–DBFF 与 DC00–DFFF,称作「代理对」)合起来表示它——这就是一个 emoji 要写两段\ud83d\ude00 的全部原因。反过来,😀、U+1F600、\u{1f600} 写的都是码点, 所以只要一段。理解了这一条,你就能自己判断某个转义写法该有几段。
这套拆法可以自己验算,四步就够(以 😀、码点 U+1F600 为例):第一步减去 0x10000,得 0xF600,也就是十进制的 62976;第二步取它的高 10 位,62976 ÷ 1024 向下取整是 61,加上 起点 0xD800 得到 0xD83D;第三步取低 10 位,62976 − 61 × 1024 = 512, 加上起点 0xDC00 得到 0xDE00;第四步把两段拼起来,正是上表最后一行的\ud83d\ude00。凡是码点在 U+10000 以上的字符都走这套算术——emoji、𠮷(U+20BB7)这类扩展区 生僻字都在其内,所以它们的 \uXXXX 写法必然是两段;而「中」落在 U+FFFF 以内,永远只有 一段。
Unicode 转换为什么我的结果不对:七种常见情况
最高频的一类是 JSON:json 里的 \u 怎么还原、json 中文 unicode 还原、 json 中文转 unicode,本质都是同一件事。Python json 中文变成 unicode 是因为json.dumps 默认 ensure_ascii=True,把 ensure_ascii 中文这一项设成 False 就不再转义;Java unicode 转中文、 js unicode 编码解码遇到的也是同一层转义,粘进本页选「解码」即可。
| 你看到的 | 原因与做法 |
|---|---|
| 转出来是 \ud83d\ude00 两段 | emoji 超出了 BMP,\uXXXX 只能表示 16 位。想要一段就换 \u{1f600}(ES6)或 \U0001f600(Python)。 |
| %E4%B8%AD 解不开 | 那是 URL 百分号编码(UTF-8 字节),不是 %u4E2D(UTF-16 码元)。本页不处理,请用「URL 编码/解码」,本页会直接给出跳转。 |
| &、  没变 | 本页只处理 中 与 中 这类数值字符引用,命名实体不在范围内,会原样保留并计数提示。 |
| \\u4e2d 没被还原成「中」 | 这是对的。前面的 \\ 是一个字面反斜杠,后面的 u4e2d 只是普通字母,把它当转义解开会丢掉那个反斜杠。 |
| CSS 结果末尾多了个空格 | 规范要求的终止符,删了会把后面的字符吞进转义序列。这个空格必须留着。 |
| 中文没被转,只转了几个奇怪的字符 | 范围选成了「只转不可见字符」或「只转汉字」。切回「只转非 ASCII」或「全部字符」即可。 |
| 两个字符串一模一样却不相等 | 用「揪出不可见字符」预设,零宽空格会显形成 \u200b。它们不会被本页删掉,只是让你看见。 |
Unicode 只转中文不转英文:四种编码范围怎么选
把中文塞进只认 ASCII 的配置文件时,你要的是「结构和英文照样能读、只有中文变成转义码」, 而不是把每个字符都转一遍。范围开关就是干这个的,它比记法开关更影响可用性。
| 范围 | 转什么 | 典型场景 |
|---|---|---|
| 只转非 ASCII | 只转 U+0080 及以上:中文、日韩文、emoji、全角标点、零宽字符 | 把中文塞进只认 ASCII 的配置、源码或 JSON,结构与英文原样可读 |
| 全部字符 | 每个码点都转,包括英文字母、数字与半角标点 | 混淆、对齐、逐字符检查 |
| 只转汉字 | 只转 CJK 统一表意文字及扩展区,标点与 emoji 保持可读 | 只想藏汉字,其余原样 |
| 只转不可见字符 | 零宽字符、NBSP、各种窄空格、控制字符、BOM、变体选择符、全角空格 | 排查「肉眼一样却匹配不上」的字符串 |
一个容易忽略的细节:「只转不可见字符」刻意不含 Tab 与换行。它们是文本 的结构字符,不是看不见的杂质;把换行也算进去会让整篇文本的换行全变成 \u000a,真正要找 的那个零宽空格反而被淹没。要连换行一起转,请选「全部字符」并关掉「保留真实换行」。
字符档案与不可见字符:零宽空格怎么找出来
零宽字符怎么找出来是这一节的重点:它们没有宽度、复制粘贴也看不见, 只有转成码点写法才会现形。
「明明看起来一模一样,程序就是判不相等」——这类问题的答案几乎总在不可见字符里。粘贴过来 的文本可能带着零宽空格 U+200B、不换行空格 U+00A0、方向控制符 U+202A、变体选择符 U+FE0F 或者 BOM U+FEFF,它们在任何编辑器里都没有形状,却是实实在在的字符。
| 字符 | 码点 | \uXXXX | 常见来源 |
|---|---|---|---|
| 零宽空格 | U+200B | \u200b | 从网页、飞书、Notion 复制文本 |
| 不换行空格 | U+00A0 | \u00a0 | HTML 的 、Word 与 PDF 复制 |
| 零宽连接符 | U+200D | \u200d | 组合 emoji(👨👩👦 中间就有两个) |
| 变体选择符 | U+FE0F | \ufe0f | 让符号以彩色 emoji 形态显示 |
| 字节顺序标记 | U+FEFF | \ufeff | Windows 记事本另存的 UTF-8 文件开头 |
| 全角空格 | U+3000 | \u3000 | 中文输入法下按空格键 |
把可疑文本粘进来、点「揪出不可见字符」,它们就会以 \u200b 这样的形式现形,并附上行号 列号;「字符档案」还会逐字给出码点、UTF-8 字节与 UTF-16 码元,方便你直接贴进 issue 或 工单里说明问题。本页只让它们现形,一个字符都不会替你删——需要清理请用「富文本清理」, 需要把全角空格变成半角请用「全角半角转换」。
Unicode 转换这页做什么、不做什么
| 事项 | 本页的处理 |
|---|---|
| 支持的写法 | 10 种:\uXXXX、\u{}、\U000XXXXX、&#十进制;、&#x十六进制;、CSS、%uXXXX、U+、十进制、0x |
| 解码时额外认识 | \xNN 与大写变体 中;\n \r \t \\ 这类基础转义也照常还原 |
| 默认不识别 | CSS 转义与 0x(Windows 路径 C:\4e2d、源码里的 0x1F 误判率太高,需手动勾选) |
| 裸数字 | 20013 到底是码点还是数字无法判断,只有显式勾选「输入是纯码点列表」才解析 |
| HTML 命名实体 | 不做 &、 、©,遇到会原样保留并计数提示 |
| URL 百分号编码 | 不做 %E4%B8%AD,请用「URL 编码/解码」;本页只做 %uXXXX |
| JSON 语法层转义 | 不做引号与控制字符的 JSON 语义,请用「JSON 格式化」的转义/去转义 |
| NFC / NFD / NFKC 归一 | 不做。é 与 e+◌́ 是两串不同码点,本页如实转成两种不同结果,不替你合并 |
| 八进制转义 \101 | 不做,歧义太大,会原样保留并计入未知转义 |
| 单次上限 | 500 万字或 10 MB;超过 20 万字自动分片并显示进度、可取消 |
| 网络请求与落盘 | 零请求;只把方向、写法、范围等参数偏好记在本机,原文与结果不落盘 |
这件事在中文里的叫法很多:Unicode 编码转换、Unicode 编码在线转换、Unicode 解码、 Unicode 转码工具,按方向又叫中文转 Unicode 与 Unicode 转中文、汉字转 Unicode 与 Unicode 转汉字——说的都是同一件事。要按字反查身份证式的信息(码点、平面、分类、 各种编码),本页的字符档案就是一个字符编码查询在线入口;HTML 实体转中文这个方向 请用「HTML 实体转换」,两页各管一段。
英文语境下这类工具通常叫 unicode escape converter、unicode to text online、 text to unicode escape 或 text to unicode,搜 \u decoder online、chinese to unicode converter 找到的都是同一件事。要按名字找一个符号(比如「℃ 怎么打」)请用「特殊符号大全」;要把全角字符变半角请用「全角半角转换」;要比对两段文本 哪里不一样请用「文本对比」。