原理解说发布日期 阅读时间约 8 分钟

“�”“?”乱码能恢复吗?如何补全缺失的文字,以及如何判断无法恢复的乱码

乱码的日语文本里夹杂着“�”(黑色菱形里有问号)时,人们往往以为已经没救了。其实每个“�”处丢失的多半只有 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)文字和 tai、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. 1

    不要在乱码状态下覆盖保存

    保存显示为乱码的文件,“�”处原来的字节就会丢失。发现后请不保存直接关闭,再指定编码重新打开。

  2. 2

    保留原始文件或邮件

    转换或修改前,先复制一份原始文件。只要有原件,不必从乱码推测也能可靠地恢复。

  3. 3

    连同“�”原样粘贴

    把乱码粘贴到工具时,不要删除“�”,也不要只摘取能读的部分。“�”的位置正是补全的线索。

是哪种编码搞错造成的乱码,可以在乱码类型速查表中确认。如果是 CSV 在 Excel 中打开后乱码,按CSV 用 Excel 打开乱码怎么办的步骤重新打开,不必推测“�”就能看到原来的文字。

常见问题

乱码中的“�”是什么?
它是 Unicode 的 U+FFFD(替换字符),显示在软件无法把字节读成文字的地方。用错误的编码打开文件时,不符合规则的字节序列会被替换成“�”。
夹杂“�”的乱码能恢复吗?
如果是把 UTF-8 用 Shift_JIS 打开产生的“�”,多数情况下可以推测补全,因为每个字符大约只缺 1 个字节,而且根据 UTF-8 的规则可以缩小候选范围。不过句末等线索较少的地方可能猜错。
变成“?”的文字能恢复吗?
不能。转换编码并保存时,无法表示的字符被替换成了“?”,原字符的信息已不复存在。如果有原始文件,请用正确的编码重新打开。
“�”这种乱码是什么?
它是把“�”保存为 UTF-8 的字节(EF BF BD)用 Latin-1(Windows-1252)读取的结果,表示已经乱码的文本又乱码了一次(两次乱码)。反向追溯两次有时可以恢复。

本文介绍的工具

相关文章