[sjis] mojibake

Dec 27, 2011 12:03

Когда я на русской винде распаковываю зипы, заархивированные где-то на японской винде с использованием кодировки Shift-JIS в названиях файлов, у меня на выходе получаются файлы с названиями в стиле:

Read more... )

кодировки, проги

Leave a comment

Comments 17

lesoff December 27 2011, 08:55:51 UTC
У меня японские файлы квадратиками открываются на 4х компьютерах. На одном нормально. Приходится на том, где нормально все переименовывать, а потом сливать на сервер. Вроде все компьютеры имеют одинаковый софт. Мистика.

Reply


dexter December 27 2011, 11:21:05 UTC
Выложи, цены не будет )

Reply

ob_ivan December 27 2011, 11:38:21 UTC
Сначала лажу найди ;)

Reply

dexter December 27 2011, 11:41:15 UTC
Это уже бонус. Алсо я не умею в кодировки.

Reply


vtab December 27 2011, 19:35:45 UTC
01-ЧDВ╡ВвХЧВкРБВнВаВ╠ПъПКВ┼
Это то, что на самом деле получается после преобразования (write shift_jis, read cp1251).
В названиях файлов псевдографика и, думаю, диакритика прололо совсем.
Без словаря и перебора вариантов ничего ты не восстановишь.

Reply

ob_ivan December 27 2011, 20:02:50 UTC
Так точно. Причём логично заключить, что оно (не уверен, кто именно - винрар или файловая система) делает это специально из пущих эстетических соображений.

В итоге утилиткой я пользуюсь, только чтобы выцарапать выжившие иероглифы (на кану расчёту нету), а там с ними разбирается гугл.

Reply


oscar_6 December 27 2011, 19:52:56 UTC
Ок, пробуем по приведённой методике расшифровать имя третьего файла.

Первые два символа расшифровываются без проблем: 膝枕
Дальше начинается аццкая свистопляска. Берём следующие три символа:
c22b c92d c22d,
после обработки получаем
822b 892d 822d.
Таких символов в таблице Shift-JIS нету.

Читерски заглянув по ссылке, узнаём, что должны получиться символы
で 過 ご,
которые имеют коды
82c5 89df 82b2.
Обнаруживается, что первые байты получились правильно. Стало быть, собака зарыта во вторых байтах. Однако, как нетрудно увидеть, в одном случае из 2d должно получиться df, а в другом -- b2.

В этом месте я сделал вывод, что имею дело с результатом необратимого преобразования.

Reply

ob_ivan December 27 2011, 20:00:15 UTC
Именно.

Я так понял, винрар при дешифровке пытается сгенерить байт с кодом, который его по каким-то системным соображениям не устраивает, и он откидывает его на ближайший "похожий" "хороший" символ. Так вся псевдографика превращается в печатные знаки типа |, +, -, и тем самым, прямому восстановлению оно не подлежит.

Reply


lerm_ru December 28 2011, 10:06:52 UTC
А зачем все эти мучения, если есть оригинальный ZIP-файл, в котором имена просто лежат в SJIS, без всякого искажения? Почему просто оттуда их нельзя прочитать?

Reply

ob_ivan December 28 2011, 11:38:18 UTC
Хммм, может, потому что для этого надо разбираться в формате ZIP'а и писать приложения под винду, а я не могу похвастать ни тем, ни другим?

Reply

lerm_ru December 28 2011, 14:41:24 UTC
Ок. Я сделал маленькую программку, которая отображает содержимое zip-архива (с указанной кодировкой) и сохраняет его в файл (также с заданной кодировкой): http://narod.ru/disk/35844094001/ziplist.zip.html

Для работы должна быть установлена Java Runtime Environment (http://java.com).

Для использования достаточно вызвать:
ziplist <имя архива> <имя выходного файла>

Например:
ziplist 123.zip result.txt

По умолчанию, кодировка архива считается ShiftJIS, кодировка выходного файла - UTF-8. Если не указывать имя выходного файла, то печататься оглавление будет прямо на экран (что, впрочем, вряд ли будет полезным). Для показа остальных опций (указание кодировок) можно указать ключ --help.

Reply

ob_ivan December 28 2011, 17:07:51 UTC
О, я просто мечтаю о такой.

Bug report. У меня на системе установлена JRE 6.29, однако общение меня с утилитой через командную строку (cmd) выглядит следующим образом:
F:\Install\ZipList>ziplist.cmd "f:\Downloads\torrents\Yosuga no Sora (2010) [Doki][848x480 h264 BD AAC]\[Doki] Yosuga no Sora OST -Arrange- (MP3) [2A873581].zip" output.txt
'java' is not recognized as an internal or external command, operable program or batch file.
Возможно, я что-то делаю не так?

Если работа над утилиткой реально доставляет и автору, и пользователю больше, чем попытки срастить WinRar с AppLocale'ю, то можно рассмотреть также такие планы развития:

Feature request. Вывод диалогового окна с выбором настроек, browse или drag-n-drop входного файла.
Feature request. Вывод диалогового окна с копипастируемым результатом.
Feature request. Инсталлер со встраиванием утилиты в попап-меню на .zip-файлах сделает её пригодной не только для программистов.
Feature request. Автоматическое определение входной кодировки.

Reply


Leave a comment

Up