Исправление поврежденного текстового файла Unicode после сбоя системы

2

У меня есть текстовый файл, который содержит персидский текст Unicode (арабские единицы).
Моя система сломалась, и после перезагрузки я обнаружил, что мой файл поврежден.
файл в настоящее время отображает текст следующим образом:

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

часы верны! так 3:27 а также 5:28 а также 16:48 и пробелы отображаются правильно, но остальная часть текста повреждена.
Я использовал шестнадцатеричный редактор и проверил юникодные единицы:

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

но это не похоже ни на один символ Юникода на персидском языке (которые начинаются с d880 в dbbf или кодовые точки из 0600 в 06ff ) в то время как пространство (единица 20 ) и латинские цифры верны!

Есть ли способ исправить этот текст?

RYN
источник

Ответы:

2

Похоже, что он был прочитан с использованием неправильной кодировки (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 изменения

гУКдП ПСИЗСе

в

سأؚش? ? ءؘؗءص

Какой Google переводит на

Я вернусь? Какие?

Но я понятия не имею, чушь ли это. Это, конечно, выглядит ерундой.

Некоторое время, проведенное в игре подобным образом, может привести к решению.

RedGrittyBrick
источник