Unicode 转义与还原
编码加密所有处理都在浏览器本地完成,数据不上传服务器
把中文、emoji 这类非 ASCII 字符转成转义写法,或者把转义还原成字符。三种写法各有各的场合:\uXXXX 用在 JS / Java / C# 的字符串字面量与 .properties 文件里;\xXX 表示 UTF-8 字节,是 Python、C、PHP 里常见的写法(\xE4\xB8\xAD 就是「中」);&#xXXXX; 是 HTML 的数字实体。emoji 按标准的成对代理项写成 \uD83D\uDE00,而不是 Java 与 .properties 文件不认的 \u{1F600}。为了让编解码严格互逆,反斜杠与 & 也会一并转义 —— 否则原文里本来就有的 \u0041 会在解码时被当成转义序列,静默变成字母 A。
功能
- 双向转换:中文、emoji 与非 ASCII 字符 ⇄ 转义写法
- 三种形式:\uXXXX(JS / Java)、\xXX(UTF-8 字节)、&#xXXXX;(HTML 数字实体)
- 解码时三种形式同时识别,混在一段文本里也能还原
- emoji 输出标准的成对代理项 \uD83D\uDE00,Java 与 .properties 文件可直接使用
- 编码时把反斜杠与 & 一并转义,保证「解码(编码(x)) === x」严格成立
- 解码还认得 \u{1F600} 与 \U0001F600 两种码点写法
- 认不出的转义原样保留,不报错也不吞掉
使用方法
- 选择方向:编码或解码
- 编码时选择想要的转义形式
- 把内容粘贴进输入框,结果实时出现
- 点「复制」取走结果
常见问题
- \xXX 形式下中文为什么变成三个字节?
- 因为 \xXX 表示的是一个字节,而中文超出了单字节能表示的范围,必须先按 UTF-8 编码:中 = E4 B8 AD,写成 \xE4\xB8\xAD。这正是 Python 的 bytes、C 的字符串字面量里的表示方式。解码时也按这个规则处理,所以能不能还原,取决于那串字节本身是不是合法的 UTF-8。
- 为什么输出里多出了 \u0026 和 \u005C?
- 为了让编解码严格互逆。原文里可能本来就写着 \u0041 或 中,如果不把反斜杠与 & 转义,解码时会把它们当成真正的转义序列,静默给出错误结果。转义后的输出在 JS、Java、.properties 里都会被正确还原成原来的字符。
- emoji 为什么是两个 \u 而不是一个?
- U+1F600 超出了基本多文种平面(BMP),在 UTF-16 里必须写成代理对 \uD83D\uDE00。Java 与 .properties 文件只认这种写法,不认 \u{1F600},所以编码时按成对形式输出;反过来,解码时相邻的成对转义会自动拼成一个完整字符。
- 解码时遇到坏转义会报错吗?
- 不会。三种形式同时识别,认不出来的(半截的 \uD8、越界的 �、\n 这种别的语言的转义)一律原样保留。一段真实文本里混着几条无关的转义是常态,为此整段报错反而让你连正常的部分都拿不到。
相关工具
HTML 实体编解码
编码加密把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
Base64 编解码
编码加密把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
简繁转换
文本处理在简体与繁体之间互转中文,常用词整词替换,其余字取最常见写法,因此个别字词仍需人工核对。全部在浏览器本地完成,不上传。
URL 编解码
编码加密把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
JWT 解析
编码加密把 JWT 拆成 header、payload、signature 三段并格式化,把 iat、exp 等时间声明换算成可读时间。只解析、不验证签名,输出里会写明。全部在浏览器本地完成,不上传。
哈希计算
编码加密算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,中文按 UTF-8 字节计算,结果与 openssl、sha256sum 逐位一致。全部在本地完成,不上传。