EPUBファイルを処理しているときに、一部の epub ブックでxhtml ファイルのパスがcontent.opf URL encodedに書き込まれるという問題に遭遇しました。
たとえば、パス「abcá.xhtml」は content.opf に次のように書き込まれますhref="abc%C3%A1.xhtml"
(%C3%A1 は文字「á」の URL エンコード表現です)。
これに関する情報はどこにも見つかりませんでした。これは EPUB 規格に含まれていますか? 問題の EPUB ファイルは、Adobe InDesign で生成されたものです。
更新: Calibre E-book viewerでepub をテストしたところ、次の結果が得られました。
- ファイル名の特殊文字、content.opf の URL エンコードされたパス (abcá.xhtml および
href="abc%C3%A1.xhtml"
): Calibre は epub を問題なく開きます。 - ファイル名の特殊文字、特殊文字は UTF-8 で content.opf のパスに直接書き込まれます (abcá.xhtml および
href="abcá.xhtml"
): Calibre は問題なく epub を開きます。 - ファイル名に URL デコード可能な文字列が含まれており、同じ文字列が content.opf (abc%C3%A1.xhtml および
href="abc%C3%A1.xhtml"
)に書き込まれています。Calibreは epub を開くことができず、エラー メッセージが表示されます。
そのため、Calibreはファイルを開こうとする前にcontent.opf 内のすべてのパスを URL デコードし、最後のような奇妙なエッジ ケースにつながる可能性があると思います。
ただ、これはかなりレアなケースのようですので、パスをURLデコードして同じように処理しようと思います。