Py学习  »  Python

python2和python3之间的zipfile头语言编码位设置不同

Keeely • 7 年前 • 2201 次点击  

在使用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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41249
文章 [ 2 ]  |  最新文章 7 年前