У меня есть текстовый файл из устаревшего источника, который содержит поврежденные символы.
Сначала я думал, что коррупция была просто пустяком, но при ближайшем рассмотрении выясняется, что часть искаженного текста, вероятно, можно восстановить.
Чтобы сосредоточить свои усилия, было бы полезно понять, как выглядел оригинал, даже если я не могу полностью его реконструировать.
К сожалению, документ из коллекции, которой я не могу свободно поделиться, но вот фрагмент. Сообщение было преобразовано в UTF-8, но преобразование где-то не удалось, поэтому оно в основном неразборчиво. Фрагменты текста на чешском языке видны, где акцентированные чешские символы были заменены кириллическими символами (которые, вероятно, были чем-то совершенно другим до преобразования).
0001f80: 33d1 936e 6576 79d1 87d0 bd7a 656e d18c 3..nevy....zen..
0001f90: 6368 7e58 3833 d193 7e58 3945 d19b d0b1 ch~X83..~X9E....
0001fa0: 646f 7374 d0bd 7e58 3833 d193 6e61 7e58 dost..~X83..na~X
0001fb0: 3833 d193 7ad1 87d0 bd7a 656e 20d0 bd7e 83..z....zen ..~
0001fc0: 5838 33d1 936e 6562 6f7e 5838 33d1 9370 X83..nebo~X83..p
0001fd0: d187 656b 6cd0 b164 6b75 7e58 3833 d193 ..ekl..dku~X83..
0001fe0: 7465 6c65 666f 6e6e d0bd 7e58 3833 d193 telefonn..~X83..
0001ff0: 7374 616e 6963 657e 5838 33d1 9376 207e stanice~X83..v ~
0002000: 5838 33d1 9372 6567 696f 6e75 7e58 3833 X83..regionu~X83
0002010: d193 5072 6168 617e 5838 33d1 9365 7669 ..Praha~X83..evi
0002020: 6475 6a65 7e58 3833 d193 5350 547e 5838 duje~X83..SPT~X8
0002030: 33d1 9354 656c 6563 6f6d 2e7e 5838 33d1 3..Telecom.~X83.
0002040: 934e 617e 5838 33d1 9364 6e65 7e58 2039 .Na~X83..dne~X 9
0002050: 41d1 996e d0bd 7e58 3833 d193 7469 736b A..n..~X83..tisk
0002060: 6f76 d0b9 7e58 3833 d193 6b6f 6e66 6572 ov..~X83..konfer
0002070: 656e 6369 7e58 3833 d193 746f 7e58 3833 enci~X83..to~X83
0002080: d193 d187 656b 6c7e 5838 33d1 93d1 8765 ....ekl~X83....e
Я смутно полагаю, что кодировка может быть связана с ISO-2022, но я недостаточно знаком с ней, чтобы быть уверенным. Очевидно, он прошел по крайней мере один сломанный фильтр, возможно, несколько, прежде чем закончить вот так.
Глядя на первую строку, d1 93
равен ѓ и, вероятно, был до 8-битного байта до преобразования. Кажется, что общей схемой является ~XFF
за которым следует сигнальный байт, где FF - это некоторая шестнадцатеричная последовательность в простом ASCII (в основном 83 здесь, но обычно от 80 до 9E во всей выборке), а последний байт теперь является UTF- 8 символов. (Конечно, во входных данных также может быть несколько байтов.) Эта последовательность появляется между словами (всегда ~X83ѓ
?), А иногда и внутри слов.
Здесь тот же фрагмент, что и просто текст, который теперь отображается в UTF-8.
3ѓnevyчнzenьch~X83ѓ~X9Eћбdostн~X83ѓna~X83ѓzчнzen н~X83ѓnebo
~X83ѓpчeklбdku~X83ѓtelefonnн~X83ѓstanice~X83ѓv ~X83ѓregionu
~X83ѓPraha~X83ѓeviduje~X83ѓSPT~X83ѓTelecom.~X83ѓNa~X83ѓdne~
X 9Aљnн~X83ѓtiskovй~X83ѓkonferenci~X83ѓto~X83ѓчekl~X83ѓчe
У меня есть другие образцы на других языках, так что выбор чешского языка не является моей целью. Вот начало одного, я не знаю, возможно, какого-нибудь дальневосточного языка?
X1B%0 ~XD0^?~X98^?~XD0^?^?^?~X82^?~XD0^?~XB5^?^?~X80^?^?~X84^?~XD0^?~XB0^?~XD0
^?^?^?~X81^? ~XD0^?~XB1^?^?~X83^?~XD0^?^?~XD0^?~XB2^?~XD0^?~XB0^?~XD0^?^?^?~X8C
^?~XD0^?^?~XD0^?~XBE^? ~XD0^?~XB7^?~XD0^?~XB0^? ~XD0^?^?~XD0^?~XB5^?^?~X81^?~XD
0^?^?~XD0^?~XBE^?~XD0^?^?^?~X8C^?~XD0^?^?~XD0^?~XBE^? ~XD0^?^?~XD0^?~XB8^?~XD0^
?^?^?~X83^?^?~X82^? ~XD0^?~XB4^?~XD0^?~XBE^? ^?~X81^?~
(^?
S - это буквенные символы DEL, ASCII 0x7F.)
Пространство в месте тильды в начале может быть намеком на то, что пошло не так в преобразовании, но это дикие предположения.
ESC %
0
выглядит как код ISO-2022 для "обозначения другой системы кодирования", но что здесь означает 0
? Я, вероятно, слишком дремуч, чтобы понять статью из Википедии без дополнительных примеров, а все остальное, что я мог найти, кажется, очень сфокусировано на некотором подмножестве, таком как ISO-2022-JP.
Имеет ли мой анализ для вас смысл? Можете ли вы помочь мне выяснить, что произошло, и, возможно, даже дать совет о том, как вернуть коррупцию?
Я разместил шестнадцатеричные дампы расширенных фрагментов этих двух примеров на http://pastebin.com/ffn7CtdG