Когда я на русской винде распаковываю зипы, заархивированные где-то на японской винде с использованием кодировки Shift-JIS в названиях файлов, у меня на выходе получаются файлы с названиями в стиле:
У меня японские файлы квадратиками открываются на 4х компьютерах. На одном нормально. Приходится на том, где нормально все переименовывать, а потом сливать на сервер. Вроде все компьютеры имеют одинаковый софт. Мистика.
01-ЧDВ╡ВвХЧВкРБВнВаВ╠ПъПКВ┼ Это то, что на самом деле получается после преобразования (write shift_jis, read cp1251). В названиях файлов псевдографика и, думаю, диакритика прололо совсем. Без словаря и перебора вариантов ничего ты не восстановишь.
Так точно. Причём логично заключить, что оно (не уверен, кто именно - винрар или файловая система) делает это специально из пущих эстетических соображений.
В итоге утилиткой я пользуюсь, только чтобы выцарапать выжившие иероглифы (на кану расчёту нету), а там с ними разбирается гугл.
Ок, пробуем по приведённой методике расшифровать имя третьего файла.
Первые два символа расшифровываются без проблем: 膝枕 Дальше начинается аццкая свистопляска. Берём следующие три символа: c22b c92d c22d, после обработки получаем 822b 892d 822d. Таких символов в таблице Shift-JIS нету.
Читерски заглянув по ссылке, узнаём, что должны получиться символы で 過 ご, которые имеют коды 82c5 89df 82b2. Обнаруживается, что первые байты получились правильно. Стало быть, собака зарыта во вторых байтах. Однако, как нетрудно увидеть, в одном случае из 2d должно получиться df, а в другом -- b2.
В этом месте я сделал вывод, что имею дело с результатом необратимого преобразования.
Я так понял, винрар при дешифровке пытается сгенерить байт с кодом, который его по каким-то системным соображениям не устраивает, и он откидывает его на ближайший "похожий" "хороший" символ. Так вся псевдографика превращается в печатные знаки типа |, +, -, и тем самым, прямому восстановлению оно не подлежит.
А зачем все эти мучения, если есть оригинальный ZIP-файл, в котором имена просто лежат в SJIS, без всякого искажения? Почему просто оттуда их нельзя прочитать?
Ок. Я сделал маленькую программку, которая отображает содержимое 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.
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. Автоматическое определение входной кодировки.
Comments 17
Reply
Reply
Reply
Reply
Это то, что на самом деле получается после преобразования (write shift_jis, read cp1251).
В названиях файлов псевдографика и, думаю, диакритика прололо совсем.
Без словаря и перебора вариантов ничего ты не восстановишь.
Reply
В итоге утилиткой я пользуюсь, только чтобы выцарапать выжившие иероглифы (на кану расчёту нету), а там с ними разбирается гугл.
Reply
Первые два символа расшифровываются без проблем: 膝枕
Дальше начинается аццкая свистопляска. Берём следующие три символа:
c22b c92d c22d,
после обработки получаем
822b 892d 822d.
Таких символов в таблице Shift-JIS нету.
Читерски заглянув по ссылке, узнаём, что должны получиться символы
で 過 ご,
которые имеют коды
82c5 89df 82b2.
Обнаруживается, что первые байты получились правильно. Стало быть, собака зарыта во вторых байтах. Однако, как нетрудно увидеть, в одном случае из 2d должно получиться df, а в другом -- b2.
В этом месте я сделал вывод, что имею дело с результатом необратимого преобразования.
Reply
Я так понял, винрар при дешифровке пытается сгенерить байт с кодом, который его по каким-то системным соображениям не устраивает, и он откидывает его на ближайший "похожий" "хороший" символ. Так вся псевдографика превращается в печатные знаки типа |, +, -, и тем самым, прямому восстановлению оно не подлежит.
Reply
Reply
Reply
Для работы должна быть установлена Java Runtime Environment (http://java.com).
Для использования достаточно вызвать:
ziplist <имя архива> <имя выходного файла>
Например:
ziplist 123.zip result.txt
По умолчанию, кодировка архива считается ShiftJIS, кодировка выходного файла - UTF-8. Если не указывать имя выходного файла, то печататься оглавление будет прямо на экран (что, впрочем, вряд ли будет полезным). Для показа остальных опций (указание кодировок) можно указать ключ --help.
Reply
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