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

3

我在Linux服务器上有一些文件名中包含非ASCII字符的文件需要压缩。不幸的是,UTF8编码的文件在Windows系统上解压缩时总是出现文件名损坏的情况。

是否有一种方法可以使用特定字符集而不是本地系统字符集对文件进行压缩?或者是否有一个工具可以在Windows上正确提取UTF8编码的文件名呢?

(如果解决方案是脚本,则更喜欢PHP或Python。)


好问题,但应该属于超级用户或类似的论坛。这是一个编程网站。 - Ondra Žižka
Python的解决方案在这里 https://gist.github.com/Xiao-Chong/b6bf1fc99fcfd2a1aa442588b049fb96 - Sam Shaw
2个回答

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
请尽量解释您所做的事情,以帮助其他人更好地理解您的答案。 - Minzkraut
你说得对,我现在会描述这个主题。 - dibrovsd

1

使用7z或7zip。

在Linux上压缩文件,在Windows上解压文件都可以使用7-zip。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接