Как исправить кодировку - фигурный апостроф выглядит как ‰ Ûª

506
user1310503

У меня есть текстовый файл, в котором все символы ASCII отображаются правильно, а некоторые другие нет. В частности, есть это слово:

don‰Ûªt 

В шестнадцатеричном виде байты 64 6f 6e 89 db aa 74. Очевидно, что почти наверняка это ‰Ûªдолжен быть вьющийся апостроф, вероятно, U + 02BC, U + 2019 или U + 0092 . [ Отредактировано, чтобы добавить: Основываясь на копировании правильного апострофа из PDF, который содержит тот же текст, я теперь вполне уверен, что это U + 2019. ]

Эта веб-страница говорит

Если последовательность битов не имеет смысла (для человека) в какой-либо кодировке, документ, скорее всего, в какой-то момент был преобразован неправильно. ... Если документ был неверно истолкован и преобразован в другую кодировку, он поврежден. Попытка «починить» это может или не может быть успешным, обычно это не так. Любое ручное переключение битов или другое кодирование вуду - это, в основном, вуду.

Но, безусловно, я должен быть в состоянии выяснить, что случилось с моим файлом, учитывая, что я знаю байты и знаю, какой символ они должны означать. Может кто-нибудь сказать мне, как решить, как файл поврежден, и как это исправить?

1

1 ответ на вопрос

2
RedGrittyBrick

Может кто-нибудь сказать мне, как выяснить, как файл был поврежден, ...

Я не могу, но, возможно, вам повезет.

Учитывая скремблированную конфигурацию кубика Рубика, очень легко отработать набор ходов, чтобы вернуть его в исходное состояние. Как правило, невозможно определить, какие ходы использовались для достижения зашифрованного состояния, поскольку число возможных последовательностей ходов огромно.

Ваша проблема похожа. Частично потому, что вы не даете подсказок о платформах, локалях и инструментах, которые могли быть использованы для создания этого текстового файла.

0x89 не является допустимым первым байтом для трехбайтовой кодировки UTF8 символа. 0xDBAA - арабский пустой центральный нижний стоп. Что, конечно, неправдоподобно. Возможно, UTF8 был неверно истолкован как некоторая 8-битная кодировка, а затем сохранен как другая 8-битная кодировка. Если файл был рядом с Японией, вы можете добавить в микс некоторые злоупотребления JIS, Shift-JIS и EUC.

Может быть, есть дюжина правдоподобных символов Юникода и, возможно, большее количество вероятных 8-битных и 16-битных кодировок. Это слишком много перестановок, чтобы попробовать вручную. Если бы это было достаточно важно, я, возможно, написал бы код, чтобы попробовать все перестановки начального символа плюс две скремблирования и посмотреть, дойдут ли они до 0x89DBAA.

Статистически я ожидаю, что наиболее вероятный сценарий - это нечто почти, но не совсем отличное:

  1. Создайте текстовый файл UTF8 без спецификации (как рекомендует консорциум Unicode).
  2. Прочитайте этот файл с помощью MS-Windows Notepad в локали «Windows-Latin-1». Блокнот неправильно воспринимает UTF8 как CP-1252, отчасти потому, что UTF-8 не имеет метки порядка байтов и потому что многие инструменты Microsoft злоупотребляют / неправильно используют метку порядка байтов в качестве индикатора кодировки.
  3. Сохранить файл как «Юникод». Блокнот использует неверную терминологию Microsoft и переводит то, что он считает CP-1252, в UTF-16 с прямым порядком байтов (с спецификацией)

Но это слишком просто (так что я не пробовал).

Я уверен, что ответ будет ослепительно очевидным в ретроспективе. Но это маленький комфорт сейчас.

... и как это исправить?

Учитывая, что единственным раскрытым контентом является английское слово, don'tмы можем сделать вывод, что все данные на 95% ASCII . Это делает возможным использование ручного осмотра ...

  1. Составьте список всех различных последовательностей gobbledegook и вероятных замен, начиная с 0x89dbaa-> '.

  2. Используйте байтово-ориентированный инструмент (например sed), чтобы сделать эти замены.

  3. ???

  4. Прибыль!

Благодарю. Файл длинный и почти все символы ASCII и отображаются правильно. Я предполагаю, что он мог быть открыт в Блокноте на Windows, но я думаю, что более вероятно, что он был обработан каким-то другим наивным способом в Windows, например, открытием и сохранением в Excel с настройками по умолчанию или с неправильными настройками. Это не было распространено вокруг так много, поэтому я сомневаюсь, что это было неправильно обращено более одного раза. Эти предположения сделали бы проблему намного проще, чем аналогия с кубиком вашего Рубика, я думаю. Может быть, я попытаюсь написать код, как вы предлагаете ... user1310503 6 лет назад 0

Похожие вопросы