在使用python 2或python 3运行时,我希望这段代码的工作方式相同
from zipfile import ZipFile, ZipInfo
with ZipFile("out.zip", 'w') as zf:
content = "content"
info = ZipInfo()
info.filename = "file.txt"
info.flag_bits = 0x800
info.file_size = len(content)
zf.writestr(info, content)
但是,在python 2 out.zip下开始:
50 4b 03 04 14 00 00 08
在python3下面,它开始:
50 4b 03 04 14 00 00 00
不同的部分是
flag_bits
,设置为
0x800
对于python 2,
0x00
对于python 3。那是第11位:语言编码。bit11似乎已经准备好了
if filename.encode("ascii")
投掷。
我试图在创建zipinfo对象后通过设置标志来强制这个位,但是它被重置为
0x00
在里面
_open_to_write()
.
我想知道这里是否有人有好的解决办法。理想情况下,我希望两个输出都
有
标志集,因为这反映了jar实用程序的功能。
编辑:
更新以添加
info.flag_bits = 0x800
写下我要达到的目标。我在windows上复制了这个:
activepython 3.6.0.3600与activepython 2.7.14.2717、windows 10相比。
在Linux上:
Python3.6.6与Python2.7.11
如果这很重要的话,我正以我的例子运行它,没有hashbang,直接调用解释器:
pythonX test.py