Zip-архивы и non-ascii имена?
Столкнулся с интересной проблемой с zip-архивами и их поддержкой в Питоне. Проблема касается non-ascii имен файлов. Так питоновая реализация библиотеки zipfile не понимает имена файлов в unicode, более того используемый формат zip 2.0 хранит внутри архива имена как обычные строки.
Но это еще не все: этот формат 2.0 обозначен как DOS, поэтому русские имена файлов должны сохраняться в кодировке cp866, иначе при открытии другими zip-архиваторами и клиентами русские буквы превращаются в иероглифы. Кстати тот же WinRAR делает ZIP тоже в формате 2.0.
Но если для русских имен файлов вроде понятно что делать, то вот как нужно поступать в общем случае, когда имеем имя файла в Unicode априори не зная языка, к которому он может принадлежать, то не совсем понятно как кодироватьимя файла для сохранения внутри zip. Точнее, если имеем имя в Unicode, то по старшему байту unicode-символа можно приблизительно определить язык, но в какой кодировке их нужно готовить для zip не совсем понятно.
Кто-нибудь может подсказать как правильно решать эту проблему?
PS: я скачал с pkware их последнюю спецификацию на zip-формат, но при беглом просмотре упоминаний кодировок и non-ascii имен не заметил. Хотя может оно там спрятано глубоко. Единственно, ограничение питоновой библиотеки не обойти, она похоже умеет делать только формат 2.0 с досовыми кодировками. Или я не прав?
Но это еще не все: этот формат 2.0 обозначен как DOS, поэтому русские имена файлов должны сохраняться в кодировке cp866, иначе при открытии другими zip-архиваторами и клиентами русские буквы превращаются в иероглифы. Кстати тот же WinRAR делает ZIP тоже в формате 2.0.
Но если для русских имен файлов вроде понятно что делать, то вот как нужно поступать в общем случае, когда имеем имя файла в Unicode априори не зная языка, к которому он может принадлежать, то не совсем понятно как кодироватьимя файла для сохранения внутри zip. Точнее, если имеем имя в Unicode, то по старшему байту unicode-символа можно приблизительно определить язык, но в какой кодировке их нужно готовить для zip не совсем понятно.
Кто-нибудь может подсказать как правильно решать эту проблему?
PS: я скачал с pkware их последнюю спецификацию на zip-формат, но при беглом просмотре упоминаний кодировок и non-ascii имен не заметил. Хотя может оно там спрятано глубоко. Единственно, ограничение питоновой библиотеки не обойти, она похоже умеет делать только формат 2.0 с досовыми кодировками. Или я не прав?
