--------------------------- ƒ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, это не полная история. Что с этими байтами, которые не удалось декодировать? Как получить эти байты для начала.