[英]How to pass a variable to the argument of arcname of zipfile.write method
[英]python zipfile encoding for arcname
我正在尝试使用Python的zipfile库将多个文件添加到zip中。 问题出在压缩的文件名中,其中包含特殊字符(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(Lion):ConfÇdÇration.txt
可以读取文件
我尝试不对CP437进行编码而仅将以下一行更改为:
archive.write(infilename, filename)
这次Ubuntu仍然有同样的问题,Windows给出了“ Conf +®d+®ration.txt”,而MacOSX则完美运行。
有人知道(pythonic)跨平台解决方案吗?
谢谢!
看起来文件名是按“原样”编写的(即,第一次使用CP437编码编写,第二次-使用UTF8编写),而其他归档处理程序使用不同的方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.