EPUB 使用指南
為什麼同一本 EPUB,有的閱讀器能開、有的不行?
這是 EPUB 使用者最常見的困惑:同一本 EPUB 在電腦上用 Adobe Digital Editions 可以正常閱讀,傳到 Kobo 或 PocketBook 上卻顯示「檔案格式錯誤」。問題不在檔案壞掉,而是不同閱讀器對 EPUB 容器的驗證嚴格程度不同。
閱讀器對 EPUB 的驗證層級
EPUB 標準由 W3C 與 IDPF 共同制定,但標準文件中包含許多「應該」(SHOULD)與「必須」(MUST)的規範。不同閱讀器的實作者會選擇不同的驗證策略。有些閱讀器會嚴格遵循所有 MUST 等級的要求,有些則會對常見的錯誤進行寬容處理。這導致了同一本 EPUB 在不同裝置上的行為不一致。
舉例來說,W3C 的 OCF 規範中要求 mimetype 必須是 ZIP 的第一個 entry,這是 MUST 等級的要求。但實際上,許多閱讀器即使 mimetype 在第二個位置,仍然可以正常匯入。然而,Kobo 的某些韌體版本會在匯入時檢查 entry 順序,如果 mimetype 不在第一個位置,就會直接顯示格式錯誤。另一個例子是 macOS 的 ._* 檔案:這些隱藏的 Apple Double 檔案在某些閱讀器上會被忽略,但在 Readmoo 的匯入流程中,這些非 EPUB 標準的 entry 可能觸發檔案驗證失敗。
常見的匯入失敗原因
第一個原因是 mimetype 位置錯誤。這是最常見的失敗原因,特別是在 macOS 使用者之間。當 macOS 的 Archive Utility 解壓縮並重新壓縮 EPUB 時,mimetype 可能不再是第一個 entry。解決方法是使用 EPUB Tools 重新封裝容器,確保 mimetype 以 Stored 方式放在第一個位置。
第二個原因是 container.xml 格式不正確。有些 EPUB 的 container.xml 使用了錯誤的命名空間或缺少 full-path 屬性。例如,將 xmlns="urn:oasis:names:tc:opendocument:xmlns:container" 寫錯為 xmlns="http://www.idpf.org/2007/opf",這會導致閱讀器無法解析 container.xml。修復方法是重建正確的 container.xml 內容。
第三個原因是 OPF 路徑無法解析。container.xml 中的 full-path 屬性使用正斜線作為路徑分隔符,但有些 EPUB 在 Windows 上建立時會使用反斜線,或使用絕對路徑(如 C:\Books\content.opf)。閱讀器在解析這種路徑時會找不到對應的檔案,導致匯入失敗。
第四個原因是 ZIP 中的系統檔案污染。macOS 的 __MACOSX 資料夾與 ._* 檔案、Windows 的 Thumbs.db 與 Desktop.ini,這些檔案如果出現在 EPUB 的 ZIP 中,部分閱讀器在匯入時會因為 entry 數量與 manifest 不符而拒絕匯入。移除這些系統檔案後重新封裝通常可以解決問題。
第五個原因是 EPUB 根目錄被多包一層。當你對 EPUB 資料夾進行壓縮時,如果不小心將包含 EPUB 內容的資料夾也包進 ZIP 裡,閱讀器就會在 META-INF/container.xml 的預期位置找不到這個檔案。例如,真正的 EPUB 內容在 MyBook/OEBPS/content.opf,但 ZIP 的結構是 MyFolder/MyBook/OEBPS/content.opf,這時閱讀器在 MyBook/META-INF/container.xml 找不到 container.xml,就會報錯。EPUB Tools 在掃描時會自動偵測這種多包一層的情況,並將 EPUB 根目錄重新對齊到正確位置。
不同閱讀器的容忍度差異
根據實際測試,不同閱讀器對 EPUB 容器的容忍度有明顯的差異。Adobe Digital Editions 對容器結構的容忍度最高,即使 mimetype 不在第一個位置、或者 container.xml 的命名空間有輕微錯誤,仍然可以正常開啟。Kobo 的裝置對 mimetype 的位置與內容最敏感,如果 mimetype 不是第一個 entry 或包含多餘的換行,幾乎一定會報錯。Apple Books 對 macOS 系統檔案有較高的容忍度,但對 container.xml 的 XML 格式要求嚴格。
Google Play Books 在匯入時會對 EPUB 進行完整的驗證,包括檢查 manifest 中的所有檔案是否都存在、spine 的 itemref 是否正確、以及 OPF 的 metadata 是否完整。如果 EPUB 缺少部分檔案,Google Play Books 可能不會顯示錯誤,但會跳過缺失的檔案,導致書籍內容不完整。Kindle 不直接支援 EPUB(需要透過 Send to Kindle 轉換),轉換過程中 Amazon 的伺服器會先將 EPUB 轉換為 AZW3,如果 EPUB 的容器結構有問題,轉換就會失敗。
如何提高 EPUB 的跨裝置相容性
最好的策略是讓 EPUB 的容器結構嚴格符合 W3C 標準,即使你的主要閱讀器對錯誤很寬容,也不代表其他裝置也一樣寬容。具體做法是:確保 mimetype 是 ZIP 的第一個 entry 且使用 Stored 方式、確認 container.xml 使用正確的命名空間與路徑、移除所有非 EPUB 標準的系統檔案、以及使用 W3C 的 EPUB 驗證工具(EPUBCheck)進行完整檢查。EPUB Tools 可以處理前三個步驟,但完整內容驗證還是需要 EPUBCheck 這類專門的工具。
相關指南:EPUB 無法匯入怎麼辦 · EPUB 其實就是 ZIP · EPUB 容器結構解析 · EPUB、MOBI、AZW3 格式差異
開始檢查 EPUB