Я пытаюсь добавить несколько файлов в zip-архив с помощью библиотеки Python zipfile.
Проблема заключается в том, что в заархивированном имени файла содержатся специальные символы (utf-8).
Вот базовый код:
#!/usr/bin/env python
import zipfile
infilename = "test_file"
outfilename = "test.zip"
filename = u'Conf\xe9d\xe9ration.txt'
if __name__ == '__main__':
f = open(outfilename, "w")
archive = zipfile.ZipFile(f, "w", zipfile.ZIP_DEFLATED)
archive.write(infilename, filename.encode("CP437"))
archive.close()
f.close()
Сгенерированный файл не читается правильно с каждым zip-экстрактором:
Ubuntu 10.04 и 11.10: Conf? D? Ration.txt
Не удалось извлечь файл: «Внимание: имя файла не совпадает: Conf \? D \? Ration.txt»
Windows XP & 7: Confédération.txt
Файл может быть прочитан
MacOSX (Лев): ConfÇdÇration.txt
Файл может быть прочитан
Я пытался без кодирования в CP437 изменить одну строку на:
archive.write(infilename, filename)
На этот раз в Ubuntu осталась та же проблема, Windows выдает «Conf + ®d + ®ration.txt», а MacOSX работает отлично.
Кто-то знает (питоническое) решение для кросс-платформ?
Спасибо!