Как я могу разобраться в плохо закодированном сообщении?

---------------------------
ƒGƒ‰[
---------------------------
ƒfƒBƒXƒvƒŒƒCƒ‚[ƒh‚ªÝ’è‚Å‚«‚Ü‚¹‚ñ.
---------------------------
OK   
---------------------------

Я получаю это четкое сообщение об ошибке из Система одиночества стрелка 4 , после того, как я скармливаю ему эту версию d3drm.dll (вздох)

Вот шестнадцатеричный дамп для вашего удобства:

00000000  c6 92 66 c6 92 42 c6 92  58 c6 92 76 c6 92 c5 92  |..f..B..X..v....|
00000010  c6 92 43 c6 92 e2 80 9a  c2 81 5b c6 92 68 e2 80  |..C.......[..h..|
00000020  9a c2 aa c2 90 c3 9d e2  80 99 c3 a8 e2 80 9a c3  |................|
00000030  85 e2 80 9a c2 ab e2 80  9a c3 9c e2 80 9a c2 b9  |................|
00000040  e2 80 9a c3 b1 2e 0a                              |.......|
00000047

Как бы вы превратили это в связное сообщение об ошибке - то есть , как бы вы подобрали правильную пару кодирования / декондации для этого сообщения об ошибке?


Вот что я пробовал.

Думаю, проблема в том, что разработчик использовал неправильные настройки кодировки для этого сообщения (учитывая возраст игры, разработанной для WinXP, это неудивительно). Глядя на него, можно предположить, что сообщение было закодировано в какой-то многобайтовой кодировке ( ƒf ƒB ƒX ƒv ƒŒ .)

Однако, Кажется, каждая группа состоит из трех байтов (переменная?). Это исключает обычных подозреваемых:

>>> wat = "ƒfƒBƒXƒvƒŒƒCƒ‚[ƒh‚ªÝ’è‚Å‚«‚Ü‚¹‚ñ. "
>>> wat.encode("UTF-8").decode("UTF-32")
UnicodeDecodeError: 'utf32' codec cannot decode bytes in position 0-3:
codepoint not in range(0x110000)
>>> wat.encode("UTF-8").decode("UTF-16")
UnicodeDecodeError: 'utf16' codec cannot decode bytes in position 70-70:
truncated data
>>> wat.encode("UTF-8")[:-1].decode("UTF-16")
'鋆왦䊒鋆왘皒鋆鋅鋆왃\ue292骀臂왛梒胢슚슪쎐\ue29d馀ꣃ胢쎚\ue285骀ꯂ胢쎚\ue29c骀맂胢쎚⺱'
#meaningless according to Google Translate.

Я выбрал UTF-8 в качестве начальной кодировки, потому что ASCII не работал ( UnicodeEncodeError: кодек 'ascii' не может кодировать символ '\ u0192' в позиции 0: порядковый номер не in range (128) ) и UTF-8 в любом случае должна быть кодировкой по умолчанию для Windows 7 (ОС, которую я пытался использовать.)


Не совсем там.

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

>>> print (wat.encode("UTF-8").decode("Shift-JIS"))
UnicodeDecodeError: 'shift_jis' codec cannot decode bytes in position 22-23: illegal multibyte sequence
>>> print (wat.encode("UTF-8")[:22].decode("Shift-JIS"))
ニ断ニ達ニ湛ニ致ニ椎槌辰ニ停

Википедия говорит, что существует очень похожая кодировка: cp932.

>>> print(wat.encode("UTF-8").decode("932"))
UnicodeDecodeError: 'cp932' codec cannot decode bytes in position 44-45: illegal multibyte sequence
>>> print(wat.encode("UTF-8")[:44].decode("932"))
ニ断ニ達ニ湛ニ致ニ椎槌辰ニ停喙ニ檀窶堋ェテ昶凖ィ窶堙

Опять же, очень отличается от того, что он вставил. Но давайте посмотрим:

>>> print("ディスプレイモ\x81[ドが\x90ン定できません.\n")
ディスプレイモ[ドがン定できません.

Однако это мусор для Google Translate. Затем я попытался удалить некоторые детали. Учитывая, что デ ィ ス プ レ イ означает «отображение», если бы я удалил «мусор» вокруг битов, которые не могут быть декодированы, я получаю:

  ディスプレイモ\x81[ドが\x90ン定できません.
→ ディスプレイ      ドが    ン定できません.
→ The display mode is not specified.

Однако, поскольку я спросил о SO, это не полная история. Что с этими байтами, которые не удалось декодировать? Как получить эти байты для начала.

10
задан badp 28 November 2010 в 20:07
поделиться