首页 > 文章 > 开发运维 > Unicode转中文没变回来?先认清反斜杠、百分号和表情写法

Unicode转中文没变回来?先认清反斜杠、百分号和表情写法

Unicode转中文

点击使用相关工具

去使用

同样是一串看不懂的字符,\u4e2d和%E4%B8%AD都可能与“中”有关,但要用不同的处理方式。把后一串直接放进Unicode转中文,点“转换为中文”,输出仍是%E4%B8%AD。这不是多点几次按钮就能解决的问题:本页认的是反斜杠u后接四位十六进制的文本片段。

一段可以原样复制的往返样本

在“中文/文本 → Unicode”输入区填写下面这段文字,点击“转换为Unicode”:

中文A😀

本页输出为:

\u4e2d\u6587A\ud83d\ude00

再把这行结果放入“Unicode → 中文/文本”的输入区,点击“转换为中文”,应得到原来的中文A😀。注意不是复制整个网页、代码围栏或说明文字。ASCII字母A在编码时保持原样,中文变成四位形式,表情则占了连续两段。字母大小写不是障碍,四位十六进制中的A到F可以大写也可以小写。

这里所谓转换是转义文本与字符之间的处理,不是把文件重新保存为另一种编码。原来的中文本来就是Unicode字符,变成反斜杠写法只是另一种表示方式。它也不提供加密保护,任何知道格式的人都能还原内容。

一个表情为什么出现两段u?

本页按JavaScript字符串的UTF-16码元逐个处理。样本中的中和文各能写成一段四位转义;😀对应U+1F600,需要一对码元,分别是D83D和DE00,所以显示成\ud83d\ude00。解码时两段按顺序还原,浏览器把这一对显示为同一个表情,并非生成了两个表情。

因此不要为了“每个字符一段”而删掉其中一半,也不要交换顺序。单独的代理项未必能显示成有效字符,有时会看到替代符号;本页没有额外的代理对合法性诊断。组合表情、肤色和连接符还可能包含更多码元,不能照着这个单独笑脸推断所有表情的长度。

这些输入会怎样处理

实际粘贴的文本本页解码结果应检查什么
\u4e2d中四位十六进制格式成立
\u4e2原样保留只给了三位,不要猜缺哪一位
\u{1F600}原样保留本页不解析花括号码点写法
%E4%B8%AD原样保留这是另一类百分号编码
\n仍是反斜杠和n不是换行转义的完整解析器

这些“原样保留”不一定伴随错误提示。输出没有变化,只能说明当前规则没有替换对应片段,不能证明输入有效、文件损坏或字符集一定错误。百分号编码可交给URL编码/解码核对;若收到的是一整段JSON,先用JSON格式化工具检查结构,并按数据来源判断字符串有几层转义。已经变成乱码的文件也不能靠反复Unicode转换自动修复,仍需要确认原始字节与读取编码。

从日志复制了两个反斜杠,可以直接粘吗?

要先确认复制到输入框里的真实字符。本页并不执行JSON解析,也不会根据日志来源自动判断转义层数。实际输入两个反斜杠再接u4e2d,即\\u4e2d,实测输出是一个反斜杠后接中:\中。它从第二个反斜杠处替换了符合四位格式的片段,留下第一个。不要把这个局部替换结果当作完整JSON字符串的解码结果。

需要进一步批量整理时,保留原文副本,只在确认来源后处理一层,再比较输出。不要全局删除所有反斜杠,路径、引号和其他转义可能因此被改变。本页处理的是文字,不负责解开Base64、还原图片或识别未知文件编码;将样本中的中文、ASCII和表情都往返核对,比仅看一两个汉字是否出现更容易发现处理范围不对。

立即使用Unicode转中文