我在Linux服务器上有一些文件名中包含非ASCII字符的文件需要压缩。不幸的是,UTF8编码的文件在Windows系统上解压缩时总是出现文件名损坏的情况。
是否有一种方法可以使用特定字符集而不是本地系统字符集对文件进行压缩?或者是否有一个工具可以在Windows上正确提取UTF8编码的文件名呢?
(如果解决方案是脚本,则更喜欢PHP或Python。)
我在Linux服务器上有一些文件名中包含非ASCII字符的文件需要压缩。不幸的是,UTF8编码的文件在Windows系统上解压缩时总是出现文件名损坏的情况。
是否有一种方法可以使用特定字符集而不是本地系统字符集对文件进行压缩?或者是否有一个工具可以在Windows上正确提取UTF8编码的文件名呢?
(如果解决方案是脚本,则更喜欢PHP或Python。)
对于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)
使用7z或7zip。
在Linux上压缩文件,在Windows上解压文件都可以使用7-zip。