---------------------------
ƒGƒ‰[
---------------------------
ƒfƒBƒXƒvƒŒƒCƒ‚[ƒh‚ªÝ’è‚Å‚«‚Ü‚¹‚ñ.
---------------------------
OK
---------------------------
Я получаю это четкое сообщение об ошибке из Система уединения стрелка 4 , после того, как я его кормлю эта версия d3drm.dll (вздох)
Вот вам hexdump для вашего удобства:
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' codec can't encode character '\u0192' in position 0: ordinal not 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, это не полная история. Что с теми байтами, которые не могут быть декодированы?Как бы вы получили эти байты для начала.