修复系统崩溃后损坏的 Unicode 文本文件

修复系统崩溃后损坏的 Unicode 文本文件

我有一个包含 unicode 波斯语文本(阿拉伯语单位)的文本文件。
我的系统崩溃了,重启后我发现文件已损坏。
该文件当前显示如下文本:

гУКдП ПСИЗСе Мдђ жнКдЗг ж ВгСнЗУК
гХЗНИе еЗн ВСФнжн КжФ геге
ПЮнЮе 3:27 Ун е ПЗСе дФжд гнПе ЗУгФ едСн УндМС ЗПг Онбн гегн е Кжн ВСФнж ЭжбПС Ие ЗУгФ ПЗСнг ИЪП ЗТ Знд ЛЗдне гнТде КХЗнС МПнП УндМС е ПЗСе ХНИК гнде ЗждЗ Сж ег ИђнС
ЗПгн е ЗТ 5:28 дФжд гнПе ЗУгФ ђСЗеЗг гЗСКнд УЭнС ВгСнЗ ПС жнКдЗг МджИн КХЗжнСФ Сж ИђнС
Ун е ПЮнЮе 16:48 ПЗСе ХНИК гнде МСЗбП ЭжСП СЖнУ МгежС ВгСнЗУК НжЗУК Ие КХЗжнСФ ИЗФе еге Сж ИђнС
ЪУ еЗн КжФ геге
гХЗНИе еЗн МПнП Сж дгнОжЗнг

时钟是正确的!所以3:275:2816:48空格字符显示正确,但其余文本已损坏。
我使用十六进制编辑器并检查了 unicode 单元:

EF BB BF D0 B3 D0 A3 D0 9A D0 B4 D0 9F 20 D0 9F D0 A1 D0 98 D0 97 D0 A1 D0 B5 20 D0 9C D0 B4 D1 92 20 D0 B6 D0 BD D0 9A D0 B4 D0 97 D0 B3 20 D0 B6 20 D0 92 D0 B3 D0 A1 D0 BD C2 98 D0 97 D0 A3 D0 9A 0D 0A D0 B3 D0 A5 D0 97 D0 9D D0 98 D0 B5 20 D0 B5 D0 97 D0 BD 20 D0 92 D0 A1 D0 A4 D0 BD D0 B6 D0 BD 20 D0 9A D0 B6 D0 A4 20 D0 B3 D0 B5 D0 B3 D0 B5 0D 0A D0 9F D0 AE D0 BD D0 AE D0 B5 20 33 3A 32 37 20 C2 98 D0 A3 D0 BD 20 C2 98 D0 B5 20 D0 9F D0 97 D0 A1 D0 B5 20 D0 B4 D0 A4 D0 B6 D0 B4 20 D0 B3 D0 BD D0 9F D0 B5 20 D0 97 D0 A3 D0 B3 D0 A4 20 D0 B5 D0 B4 D0 A1 D0 BD 20 C2 98 D0 A3 D0 BD D0 B4 D0 9C D0 A1 20 D0 97 D0 9F D0 B3 20 D0 9E D0 BD D0 B1 D0 BD 20 D0 B3 D0 B5 D0 B3 D0 BD 20 C2 98 D0 B5 20 D0 9A D0 B6 D0 BD 20 D0 92 D0 A1 D0 A4 D0 BD D0 B6 20 D0 AD D0 B6 D0 B1 D0 9F D0 A1 20 D0 98 D0 B5 20 D0 97 D0 A3 D0 B3 D0 A4 20 D0 9F D0 97 D0 A1 D0 BD D0 B3 20 D0 98 D0 AA D0 9F 20 D0 97 D0 A2 20 D0 97 D0 BD D0 B4 20 D0 9B D0 97 D0 B4 D0 BD D0 B5 20 D0 B3 D0 BD D0 A2 D0 B4 D0 B5 20 D0 9A D0 A5 D0 97 D0 BD D0 A1 20 D0 9C D0 9F D0 BD D0 9F 20 C2 98 D0 A3 D0 BD D0 B4 D0 9C D0 A1 20 C2 98 D0 B5 20 D0 9F D0 97 D0 A1 D0 B5 20 D0 A5 D0 9D D0 98 D0 9A 20 D0 B3 D0 BD C2 98 D0 B4 D0 B5 20 D0 97 D0 B6 D0 B4 D0 97 20 D0 A1 D0 B6 20 D0 B5 D0 B3 20 D0 98 D1 92 D0 BD D0 A1 0D 0A D0 97 D0 9F D0 B3 D0 BD 20 C2 98 D0 B5 20 D0 97 D0 A2 20 35 3A 32 38 20 D0 B4 D0 A4 D0 B6 D0 B4 20 D0 B3 D0 BD D0 9F D0 B5 20 D0 97 D0 A3 D0 B3 D0 A4 20 D1 92 D0 A1 D0 97 D0 B5 D0 97 D0 B3 20 D0 B3 D0 97 D0 A1 D0 9A D0 BD D0 B4 20 D0 A3 D0 AD D0 BD D0 A1 20 D0 92 D0 B3 D0 A1 D0 BD C2 98 D0 97 20 D0 9F D0 A1 20 D0 B6 D0 BD D0 9A D0 B4 D0 97 D0 B3 20 D0 9C D0 B4 D0 B6 D0 98 D0 BD 20 D0 9A D0 A5 D0 97 D0 B6 D0 BD D0 A1 D0 A4 20 D0 A1 D0 B6 20 D0 98 D1 92 D0 BD D0 A1 0D 0A C2 98 D0 A3 D0 BD 20 C2 98 D0 B5 20 D0 9F D0 AE D0 BD D0 AE D0 B5 20 31 36 3A 34 38 20 D0 9F D0 97 D0 A1 D0 B5 20 D0 A5 D0 9D D0 98 D0 9A 20 D0 B3 D0 BD C2 98 D0 B4 D0 B5 20 D0 9C D0 A1 D0 97 D0 B1 D0 9F 20 D0 AD D0 B6 D0 A1 D0 9F 20 D0 A1 D0 96 D0 BD D0 A3 20 D0 9C D0 B3 D0 B5 D0 B6 D0 A1 20 D0 92 D0 B3 D0 A1 D0 BD C2 98 D0 97 D0 A3 D0 9A 20 D0 9D D0 B6 D0 97 D0 A3 D0 9A 20 D0 98 D0 B5 20 D0 9A D0 A5 D0 97 D0 B6 D0 BD D0 A1 D0 A4 20 D0 98 D0 97 D0 A4 D0 B5 20 D0 B5 D0 B3 D0 B5 20 D0 A1 D0 B6 20 D0 98 D1 92 D0 BD D0 A1 0D 0A D0 AA C2 98 D0 A3 20 D0 B5 D0 97 D0 BD 20 D0 9A D0 B6 D0 A4 20 D0 B3 D0 B5 D0 B3 D0 B5 0D 0A D0 B3 D0 A5 D0 97 D0 9D D0 98 D0 B5 20 D0 B5 D0 97 D0 BD 20 D0 9C D0 9F D0 BD D0 9F 20 D0 A1 D0 B6 20 D0 B4 D0 B3 D0 BD D0 9E D0 B6 D0 97 D0 BD D0 B3

但它似乎与波斯语中的任何unicode字符都不匹配(从到开头d880dbbf代码点从060006ff),而空格(单位20)和拉丁数字是正确的!

有什么方法可以修复这个文本吗?

答案1

看起来它可能使用了错误的编码(KO18?)读取,导致波斯语代码点值被读取为西里尔文,然后使用西里尔文的 UTF8 编码保存,

EF BB BF   - Byte Order Mark 0xFEFF in UTF-8 encoding


D0 B3   - Common Cyrillic characters in UTF8 start with D0, D1 or D2
D0 A3 
D0 9A 
D0 B4 
D0 9F 
20      - Space character
D0 9F 
D0 A1 
D0 98 
D0 97 

如果您知道前几个单词的阿拉伯字符是什么,您可能能够推断出逆转错误重新编码所需的数字转换。当然,并非所有转换都是可逆的。

我不懂阿拉伯语/波斯语,所以我不知道什么样的转换会产生合理的文本。

例如,将 D0s 更改为 D8 会改变

盖茨比

سأؚش؟更多

谷歌翻译成

我会回来的?什么?

但我不知道这是否是胡说八道。这看起来确实很荒谬。

花一些时间以类似的方式进行尝试可能会找到解决方案。

相关内容