Unicode 编码转换器
Unicode 解码与编码:unicode 转中文、中文转 unicode 双向互转,\u 转义、U+ 码点、utf8 字节粘进去自动识别,一次给出全部写法。还能逐字符看码点与字节、揪出看不见的零宽字符。浏览器本地运行,不上传。
全部在你的浏览器里运行——输入不会被上传、记录或存储。
结果会显示在这里 一次给出全部写法
| JavaScript / Java / JSON uXXXX | — | |
|---|---|---|
| ES6 u{XXXXX} | — | |
| Python uXXXX / UXXXXXXXX | — | |
| Go uXXXX / UXXXXXXXX | — | |
| Rust u{XXXXX} | — | |
| 码点 U+XXXX | — | |
| HTML 十进制 &#NNNNN; | — | |
| HTML 十六进制 &#xXXXX; | — | |
| URL 编码 %XX | — | |
| CSS XXXXXX | — | |
| UTF-8 字节 hex | — | |
| UTF-16 码元 hex | — | |
| UTF-32 hex | — | |
| 八进制字节 NNN | — | |
| 十进制码点 NNNNN | — |
逐字符拆解
| 字符 | 码点 | UTF-8 | UTF-16 | 脚本 | 类别 | 名称 |
|---|---|---|---|---|---|---|
| 结果会显示在这里 | ||||||
速查表
| 字符 | 码点 | JavaScript / Java / JSON | UTF-8 字节 | URL 编码 | HTML 十进制 |
|---|---|---|---|---|---|
| 中文 | U+4E2D U+6587 | \u4E2D\u6587 | E4 B8 AD E6 96 87 | %E4%B8%AD%E6%96%87 | 中文 |
| 😀 | U+1F600 | \uD83D\uDE00 | F0 9F 98 80 | %F0%9F%98%80 | 😀 |
| A | U+0041 | A | 41 | A | A |
| ␣ U+3000 | U+3000 | \u3000 | E3 80 80 | %E3%80%80 |   |
所有行为都在 Node、Python、Java、Go 与真实浏览器引擎上实测过,不是照文档推断的。
什么是 Unicode 转义?
Unicode 转义是用纯 ASCII 把一个字符写出来,好让它能穿过那些搬不动原字符的系统。同一个字符在几乎每种语言里的转义写法都不一样:JavaScript 和 JSON 按 UTF-16 码元写四位十六进制,ES6 和 Rust 用大括号装整个码点,Python 和 Go 另有八位的宽写法,CSS 只用一个反斜杠开头,HTML 则有自己的数字引用和命名实体。它们描述的是同一个码点——这正是同一段文字会以六七种面貌出现在你面前的原因。
中文
U+4E2D U+6587 code point
\u4E2D\u6587 JavaScript / Java / JSON
\u{4E2D}\u{6587} ES6 / Rust
E4 B8 AD E6 96 87 UTF-8
%E4%B8%AD%E6%96%87 URL
中文 HTML 这个转换器能做什么
自动判断是哪种写法
转义、大括号、宽转义、码点、实体、百分号编码、字节串,粘进去就认,不用切模式。
混合内容不会被弄坏
只有编码部分会变。JSON 标点、Windows 路径、已经转义过的反斜杠都原样保留。
一次给出全部写法
一趟粘贴产出整张对照表,不必为了从一种语言换到另一种而转两次。
按语言给对的形式
BMP 外字符对 Python 与 Go 输出宽转义——那两个语言拿到代理对会直接出错。
拆到字符这一层
每个字符的码点、UTF-8 与 UTF-16 字节、脚本与类别;有正式名称的还会给出名称。
把不可见字符显形
BOM、零宽连接符、不换行空格都会显示成可见的替身。
示例
整行日志粘进去,只有转义部分会变
{"msg":"\u4e2d\u6587 failed","code":500} {"msg":"中文 failed","code":500} 引号、键名、数字都原样保留,所以可以整行粘贴,不必先手工把转义串挑出来。
一次粘贴里混着四种写法
U+4E2D \u{1F600} 中 \ud83d\ude00 中 😀 中 😀
码点写法、ES6 大括号、HTML 实体、代理对,一趟全部解出来,事先不需要选模式也不需要配置。
一个字,各语言各自的写法
中
\u4E2D JavaScript / Java / JSON
\u{4E2D} ES6 / Rust
U+4E2D code point
E4 B8 AD UTF-8
\344\270\255 octal 同一个字按每种语言期望的形式列出。注意 Python 与 Go 对 BMP 外字符必须用宽转义——写成代理对的话 Go 直接编译不过,Python 会抛 UnicodeEncodeError。
使用方法
- 1
粘贴
转义串、码点、实体、编码字节或纯文本都行,不用先告诉它是哪一种。
- 2
看结果
可读文本立即出现,同时标出识别到了哪几种写法。
- 3
复制你要的那种
结果下方列出全部写法,每一行都有自己的复制按钮。
- 4
有疑点就往下拆
展开逐字符表看码点、字节、脚本与名称,打开「显示不可见字符」把藏起来的字符揪出来。
值得知道的几个坑
该用宽写法的地方写成了代理对
在 JSON 里好好的一对代理,到 Python 里变成两个坏掉的半个字符,到 Go 里直接编译不过。U+FFFF 以上的字符请用八位宽写法。
\ud83d\ude00
\U0001F600
把 HTML 数字引用当成纯码点解
128 到 159 之间的引用必须按 windows-1252 读。朴素实现会把右单引号变成一个不可见控制字符,那些位置在页面上什么都不显示。
’ -> U+0092
’ -> U+2019
CSS 短转义后面紧跟十六进制字符
解析器会继续把十六进制位吃进去,转义和后一个字符并成一个错误的码点。补齐到六位即可。
\4E2Da
\004E2Da
什么时候会用到
- 看日志
- 服务器日志和接口响应经常把非 ASCII 转义掉。整行粘进来就能读,不用先编辑。
- 在语言之间搬字符串
- 直接复制目标语言接受的那种写法,不用手工在代理对与宽转义之间换算。
- 追编码 bug
- 比较失败或数据库拒收时,逐字符表会把牵涉到的码点与字节摆出来。
- 清洗粘贴进来的内容
- 从网页或文档复制的文本常常夹带不可见字符,在它们进生产之前找出来。
技术细节
- 转义的是码元不是字符
- JavaScript、Java 和 JSON 转义的是 UTF-16 码元,所以 U+FFFF 以上的字符需要两个转义。Python 与 Go 另有八位写法,直接装下整个码点。
- HTML 数字引用会被重映射
- HTML 规范要求 128 到 159 区间的数字引用按 windows-1252 读而不是按码点读,所以 146 是右单引号而不是一个不可见控制字符。旧 CMS 与 Word 导出的中文数据里这类引用成片出现。
- CSS 转义需要补位
- CSS 转义最多吃六位十六进制,短写法后面紧跟十六进制字符就会并成一个错误的码点。补齐到六位可以消除歧义,后面跟一个空格则会被当作终止符吃掉。
- 孤立代理在各处的下场都不一样
- JSON 序列化会保留它,TextEncoder 会静默替换掉,百分号编码会直接抛错,Java 写成一个问号,Python 则抛异常。
最佳实践
- 比较之前先规范化
- 比较或去重之前把两边折叠到同一规范化形式,姓名和标识符尤其要注意。
- Python 与 Go 用宽写法
- 代理对在 JSON 里合法,在这两个语言里会坏掉。目标是 Python 或 Go 源码时,U+FFFF 以上一律用八位写法。
- 早一点检查不可见字符
- 在输入边界就校验粘贴进来的内容,别等到后面排查不相等时才发现。
- 留着原始值
- 一旦出现替换字符,解码就不再是无损可逆的。确认无误之前把原始值留着。
常见问题
\u4e2d\u6587 是什么意思?怎么转成中文?
反斜杠被吞掉了只剩 u4e2d,还能转吗?
为什么一个 emoji 会写成两个 \u 转义?
中文转 unicode 怎么做?
两个字符串看起来一模一样,程序却说不相等?
字符串里混进了看不见的东西导致程序报错,怎么找出来?
我粘进去的数据会被上传吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。