iT邦幫忙

0

用zipfile壓縮成EPUB檔

我在測試時研究不出為什麼我壓縮出來的EPUB檔無法開啟
於是參考了其他人的程式碼發現
我只要將
zf = zipfile.ZipFile('{}.epub'.format(path), 'a', zipfile.ZIP_DEFLATED)
改成
zf = zipfile.ZipFile('{}.epub'.format(path), 'a', zipfile.zlib.DEFLATED)
EPUB就能成功打開了
這是什麼原理啊
可以解說一下嗎

froce iT邦大師 1 級 ‧ 2021-06-09 10:11:01 檢舉
zipfile.ZIP_DEFLATED 這個會需要再 import zlib
或許是這樣的問題。
zipfile.ZIP 會加入ZIP壓縮檔頭吧?
s4028600 iT邦新手 5 級 ‧ 2021-06-09 22:20:32 檢舉
加上import zlib反而會報錯
更正 檔案被編輯 重新測試

壓縮檔頭有可能
但我不清楚怎麼確認

1 個回答

0
fillano
iT邦超人 1 級 ‧ 2021-06-09 12:16:40

zip file format: https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip-printable.html

epub使用zip格式當作archive的一些限制:https://www.w3.org/publishing/epub3/epub-ocf.html#sec-container-zip (很多使用zip當作archive的規格都有類似限制)

通常可能的問題(猜測):

  1. 壓縮方法只能使用DEFLATED或STORED
  2. 不能使用zip定義的加密方法
  3. 不能切割成多檔
  4. 可以支援部分的zip64功能(不過要檔案大於4GB才會用到,所以通常不會碰到)

檢查做好的epub檔,看看裡面各個local file headers各個欄位是否符合預期。

s4028600 iT邦新手 5 級 ‧ 2021-06-09 22:23:44 檢舉

1兩個都是DEFLATED只是一個是zlib
2所以這兩個差在哪裡啊
3沒有分割
4不懂意思

fillano iT邦超人 1 級 ‧ 2021-06-10 08:44:15 檢舉

比對一下epub檔,看看差在哪裡,這樣最快知道原因。

我要發表回答

立即登入回答