“�”“?”乱码能恢复吗?如何补全缺失的文字,以及如何判断无法恢复的乱码
乱码的日语文本里夹杂着“�”(黑色菱形里有问号)时,人们往往以为已经没救了。其实每个“�”处丢失的多半只有 1 个字节,根据字符编码的规则和前后文,有很大概率能推测出原来的文字。不过,已被替换成“?”或“·”后保存的文本,以及满屏都是“�”的乱码,就无法恢复了。本文介绍“�”出现的原因、推测补全的原理、可恢复与不可恢复的判断方法,以及避免乱码恶化的注意事项。
“�”是代替无法读取的字节而显示的符号
“�”是 Unicode 中的 U+FFFD(替换字符),软件无法把字节读成文字时,就用它来代替显示。遇到不符合编码规则的字节序列时,软件会把读不了的地方换成“�”,然后继续往下读。
最常见的情况是把 UTF-8 的日语用 Shift_JIS 打开。UTF-8 的平假名和汉字每个字占 3 字节,而 Shift_JIS 按 2 字节一组来读,于是分界不断错位。错位后变成 Shift_JIS 中不存在的字节组合,或者最后多出 1 个字节,这些地方就成了“�”。日语的“文字化 + ke”(乱码)会变成“譁�ュ怜喧縺�”,“会议 no 资料”(会议资料)会变成“莨夊ュー縺ョ雉�侭”。
夹杂“�”也能推测补全的原理
UTF-8 有固定的形式:由首字节决定这个字符有几个字节,后续字节都在 80~BF 的范围内。把乱码反向追溯,就能知道缺了几个字节、缺在哪里,比如“这个字符的 3 个字节里缺了第 2 个”。还可以把候选范围缩小到用 Shift_JIS 读取时确实会变成“�”的字节。
乱码还原·解读工具的补全方式,就是把剩下的候选逐一代入,选出构成自然日语(常用汉字和平假名)的结果。实际试验的结果如下。含平假名的结果用罗马字和中文说明表示。
| 乱码 | 补全结果 | 补全的文字 | 其他候选示例 |
|---|---|---|---|
| 莨夊ュー縺ョ雉�侭 | 会議 no 資料(会议资料) | 資料 | 賃料、賄料 |
| 螻ア逕ー螟ェ驛�,譚ア莠ャ驛ス蜊�サ」逕ー蛹コ | 山田太郎,東京都千代田区(姓名和地址) | 郎、千代 | — |
| 譏取律縺ョ莨夊ュー縺ョ雉�侭繧帝√j縺セ縺吶… | 完整的两句日语(意为“发送明天的会议资料,请多关照。”) | 資料和句末的。 | — |
| 譁�ュ怜喧縺� | 文字化 + ta(实际应为 ke) | 文字和 ta | i、ka、su、ke |
如最后一例所示,句末的 1 个字前后线索较少,有可能猜错。补全的文字会以黄色显示,点击就能换成其他候选,不符合上下文的请重新选择。文本越长,线索越多,也就越容易猜中。
如何判断无法恢复的乱码
只有乱码的大部分还保留着原来的字节,才能推测补全。下面这些情况,原来的信息已经丢失,无法恢复。
- 像“?????”这样全是“?”:转换编码并保存时,无法表示的字符被替换成了“?”,原字符的信息已不复存在
- 像“������”这样全是“�”:常见于用 EUC-JP 读取 Shift_JIS 或 UTF-8 的文本。几乎所有字节都变成“�”,什么也没留下
- 像“�e�X�g”这样英文字母和“�”交替出现:2 个字节中的第 1 个字节丢失,只剩第 2 个(这个例子原本是日语片假名的“测试”)
- 像“譁·ュ怜喧縺·”这样夹杂中点:Excel 等软件用中点代替“�”显示,并直接保存或复制下来。它和真正的中点无法区分,所以往往补不回来
工具无法恢复的文字会用符号“〓”标示。“〓”很多时,就不要再指望从乱码恢复了,取得原始文件或邮件,用正确的编码重新打开才是可靠的办法。
两次乱码与“�”
把已经乱码的文本保存后,再用其他编码读取,就会变成两次乱码。例如,把 UTF-8 用 Shift_JIS 读取得到的“譁�ュ怜喧縺�”保存为 UTF-8,再用 Latin-1 读取,就会变成“èï¿½ï½æ€œå–§ç¸ºï¿½”。
“�”是把“�”保存为 UTF-8 的字节(EF BF BD)用 Latin-1 读取的结果,是两次乱码的标志。工具也会穷举尝试两次乱码的组合,所以这个例子也能恢复到“文字化 + ta”,再从候选中重新选择最后 1 个字,就能还原成原文。不过,乱码三次以上,或者中途被替换成“?”的文本,可能无法恢复。
避免乱码恶化的注意事项
- 1
不要在乱码状态下覆盖保存
保存显示为乱码的文件,“�”处原来的字节就会丢失。发现后请不保存直接关闭,再指定编码重新打开。
- 2
保留原始文件或邮件
转换或修改前,先复制一份原始文件。只要有原件,不必从乱码推测也能可靠地恢复。
- 3
连同“�”原样粘贴
把乱码粘贴到工具时,不要删除“�”,也不要只摘取能读的部分。“�”的位置正是补全的线索。
是哪种编码搞错造成的乱码,可以在乱码类型速查表中确认。如果是 CSV 在 Excel 中打开后乱码,按CSV 用 Excel 打开乱码怎么办的步骤重新打开,不必推测“�”就能看到原来的文字。
常见问题
- 乱码中的“�”是什么?
- 它是 Unicode 的 U+FFFD(替换字符),显示在软件无法把字节读成文字的地方。用错误的编码打开文件时,不符合规则的字节序列会被替换成“�”。
- 夹杂“�”的乱码能恢复吗?
- 如果是把 UTF-8 用 Shift_JIS 打开产生的“�”,多数情况下可以推测补全,因为每个字符大约只缺 1 个字节,而且根据 UTF-8 的规则可以缩小候选范围。不过句末等线索较少的地方可能猜错。
- 变成“?”的文字能恢复吗?
- 不能。转换编码并保存时,无法表示的字符被替换成了“?”,原字符的信息已不复存在。如果有原始文件,请用正确的编码重新打开。
- “�”这种乱码是什么?
- 它是把“�”保存为 UTF-8 的字节(EF BF BD)用 Latin-1(Windows-1252)读取的结果,表示已经乱码的文本又乱码了一次(两次乱码)。反向追溯两次有时可以恢复。
本文介绍的工具
相关文章
乱码类型速查表:从縺、ã、‚、ƒ、$B 判断搞错了哪种编码
“縺薙s縺ォ縺。縺ッ”“日本語”“‚±‚ñ‚É‚¿‚Í”这样的日语乱码看似杂乱,其实都是按规则变成这样的。看最先出现的几个字符,基本就能知道把哪种编码错当成了哪种。本文把最常见的 7 种乱码整理成带示例的速查表,并说明各自的成因,以及哪些能恢复、哪些不能。
阅读文章 →邮件主题乱码的原因与解决方法:=?UTF-8?B?、=?ISO-2022-JP?B?、$B 怎么读
收到的日语邮件,主题可能显示成“=?UTF-8?B?5paH5a2X…?=”这样的英文和数字,正文可能变成“$BL@F|$N…(B”。这是用邮件发送日语时约定的写法直接显示了出来。本文说明主题中 =?…?= 的原理、B 方式和 Q 方式的区别、JIS 邮件中的 $B、正文乱码的原因,以及发送方可以采取的对策。
阅读文章 →CSV用Excel打开乱码怎么办|UTF-8(带BOM)与GBK的区分使用
从网站或系统下载的CSV,双击用Excel打开后,“姓名,地址”变成了“濮撳悕,鍦板潃”。这并不是CSV内容坏了,只是Excel认错了字符编码。本文整理了乱码的原因、把现在这个CSV正确打开的方法、以后不再乱码的保存方法(UTF-8带BOM·GBK),以及转换时会丢失的字符。
阅读文章 →