社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Keeely • 5 年前 • 1600 次点击  

在使用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
 
1600 次点击  
文章 [ 2 ]  |  最新文章 5 年前