使用不同的文件名编码压缩或解压缩文件?

时间:2013-10-23 17:06:18

标签: encoding zip unzip

我在Linux服务器上使用名称超出ASCII的文件进行压缩。不幸的是,UTF8编码的文件在Windows上提取时总是有文件名损坏。

有没有办法压缩名称编码在与本地系统字符集不同的特定字符集中的文件?或者是否有一个工具可以在Windows上提取具有正确名称的UTF8编码文件?

(如果解决方案是脚本,则首选PHP或Python。)

2 个答案:

答案 0 :(得分:1)

对于python2(文件名是俄语)请使用cp866

with zipfile.ZipFile(file_handle, mode='w') as zip_file:
    for file_ in self._files.all():
        path = file_.file.path

        filename = u'Название файла.txt'
        try:
            filename = filename_utf.encode('cp866')
        except:
            ext = str(path.split('.')[-1])
            filename = '%s.%s' % (uuid4().hex, ext)

        zip_file.write(path, filename)

对于python 3

file_handle = BytesIO()
with zipfile.ZipFile(file_handle, mode='w') as zip_file:
    for file_obj in files:
        zip_file.write(filename=file_obj.full_path, arcname=file_obj.file_name)

答案 1 :(得分:0)

使用7z或7zip。

在Linux上压缩文件并在Windows上解压缩7-zip。