EPUB 使用指南
EPUB 變成資料夾了——如何重新封裝回去
這是最常見的 EPUB 問題之一:下載了一本 EPUB,右鍵解壓縮之後,EPUB 檔案不見了,變成一個資料夾。或者想用檔案總管查看 EPUB 的內容,不小心把它解開,結果再也無法還原成閱讀器可以匯入的格式。
為什麼 EPUB 會變成資料夾
EPUB 本身就是一個 ZIP 容器,所以任何可以解壓縮 ZIP 的軟體——包括 macOS 的 Archive Utility、Windows 的「全部解壓縮」、以及 Linux 的 unzip 指令——都可以把 EPUB 展開成一個目錄。問題在於,展開之後的資料夾必須重新封裝成符合 EPUB 標準的 ZIP,才能被閱讀器接受。如果只是用滑鼠右鍵選「壓縮」,產生的 ZIP 往往缺少 EPUB 需要的特殊結構,例如 mimetype 不在第一個位置、或者壓縮方式不正確。
舉例來說,macOS 的 Finder 壓縮資料夾時,會產生一個副檔名為 .zip 的檔案,把它改名成 .epub 之後,雖然外觀上變成了 EPUB,但內部結構可能不符合 OCF 標準:mimetype 可能被 Deflate 壓縮,entry 順序也未必正確。某些閱讀器可能會接受這種「寬鬆」的 EPUB,但這些裝置通常只佔少數。
如何從資料夾中辨識 EPUB root
一個解壓縮後的 EPUB 資料夾,內部可能包含多層目錄。EPUB 的 root 是包含 META-INF/container.xml 的那個目錄。如果資料夾結構是 MyBook/META-INF/container.xml,那麼 EPUB root 就是 MyBook/。如果資料夾結構是 MyBook/OEBPS/content.opf 但沒有 META-INF/,表示這個資料夾缺少了 META-INF/container.xml,需要從 EPUB 的內容中重建。
EPUB Tools 的資料夾掃描功能會自動進行這個辨識流程:先遍歷整個資料夾,尋找 META-INF/container.xml 的位置。如果找到,就以該路徑為 EPUB root,並從 container.xml 中解析出 content.opf 的路徑。如果找不到,工具會嘗試在資料夾中尋找 .opf 檔案,並根據 .opf 的位置推測 EPUB root。如果連 .opf 都找不到,工具會判斷這個資料夾無法恢復為 EPUB。
重新封裝的步驟
第一步是建立 mimetype 檔案,內容為 application/epub+zip,不帶任何換行或 BOM。第二步是以 EPUB root 為基準,將所有檔案以相對路徑加入 ZIP 封存,但必須確保 mimetype 是第一個 entry,且使用 Stored 方式儲存。第三步是寫入 ZIP 的 Central Directory 與 End of Central Directory Record。最後將產生的 ZIP 檔案副檔名設為 .epub。
在封裝過程中,有多個細節需要注意。第一,mimetype 必須在 ZIP 的 local file header 中不帶 extra field,因為某些閱讀器會檢查 extra field 是否存在。第二,所有檔案的相對路徑必須使用正斜線 /,不能使用反斜線 \,這是 ZIP 規格的要求。第三,資料夾本身不需要加入 ZIP 的 entry,只需要加入實際的檔案即可。
限制與風險
資料夾恢復的處理方式只能重建容器層級,無法修復內容層級的問題。如果原始的 EPUB 是因為 content.opf 中的 manifest 不完整而無法閱讀,單純重新封裝資料夾並不會解決這個問題。此外,如果資料夾中的檔案名稱包含非 UTF-8 編碼的字元,部分 ZIP 實作在處理時可能發生錯誤,導致產生的 EPUB 無法正常讀取。
另一個需要注意的情況是,如果使用者原先的 EPUB 是從某個 DRM 保護的書籍解壓縮而來,重新封裝後的 EPUB 可能仍然保留 DRM 加密的內容,但 EPUB Tools 不會破解或移除這些保護機制。工具只會照原樣將檔案封裝回 EPUB 容器。
相關指南:EPUB 無法匯入怎麼辦 · EPUB 其實就是 ZIP · EPUB 容器結構解析
EPUB Tools 在掃描資料夾時,採用多層次的根目錄偵測策略以提高成功率。第一層:直接尋找 META-INF/container.xml,如果找到則以該目錄為 EPUB root。第二層:如果找不到 META-INF/,則掃描所有 .opf 檔案,並根據 .opf 的位置向上推測 EPUB root——例如,如果 .opf 位於 OEBPS/content.opf,則 EPUB root 可能是 OEBPS/ 的上層目錄。第三層:如果找到多個 .opf 檔案,工具會優先選擇包含較多 manifest 項目且路徑深度最短的 .opf 作為主要 Package Document,因為這通常是 EPUB 的主內容描述檔。
在確認 EPUB root 之後,工具會自動建立一個全新的 META-INF/container.xml,並根據實際掃描到的 .opf 路徑來設定 full-path 屬性。如果資料夾中完全沒有任何 .opf 或結構化的 XML 檔案,工具會判斷這個資料夾無法恢復為 EPUB,並顯示明確的錯誤訊息,避免使用者浪費時間在無效的資料夾上。同時,工具會自動過濾掉作業系統產生的垃圾檔案,如 .DS_Store、Thumbs.db 與 __MACOSX 目錄,確保重建的 EPUB 容器乾淨且符合標準。