---------------------------
ƒGƒ‰[
---------------------------
ƒfƒBƒXƒvƒŒƒCƒ‚[ƒh‚ªÝ’è‚Å‚«‚Ü‚¹‚ñ.
---------------------------
OK
---------------------------
Я получаю это ясное сообщение об ошибке из Shooter Solitude system 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 (OS, которую я пытался использовать.)
Не совсем там.
Каби может быть на что-то, но это не полная история. Во-первых, я не могу воспроизвести его кодировку:
>>> 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.
Однако, поскольку я спросил об этом, это не полная история. Что такое с байтами, которые невозможно декодировать? Как бы вы могли получить эти байты.