Asciidoctor EPUB3で作ったepubをmobiに変換すると文字化けする
Asciidoctor EPUB3で日本語を含むmobi(Kindle用のフォーマット)を生成しようとしてハマったので調査の記録を残しておきます。
まとめ
- asciidoctor-epub3で作ったepubをkindlegenでmobiに変換すると文字化けする
- asciidoctor-epub3からmobiを直接生成するとうまくいく
- ただし、Windows&JRubyの環境だとmobiを直接生成できない
詳細
まずは用語の整理。mobiはKindle用のフォーマット、kindlegenはmobiを生成してくれるAmazon謹製のツールです。
asciidoctor-epub3は-a ebook-format=kf8
というオプションを付けるとmobiを生成してくれます。
このコマンド、内部でkindlegenを呼び出しているのですが、それだけじゃなくてepub自体にも手を加えています。なぜかというと、一般的なepubのフォーマットだとkindlegenが文字コードを正しく認識しないようなのです。
そこで、asciidoctor-epub3では
<meta charset=“UTF-8”/>
を
<meta http-equiv=“content-type” content=“application/xhtml+xml; charset=UTF-8”/>
に置き換える、という処理をしています。
この処理はmobiを生成するときにしか動かないので、asciidoctor-epub3でepub生成 ⇒ kindlegenでmobiに変換、とすると置き換えが行わず文字化けしてしまう、というワケ。
なので、asciidoctor-epub3からmobiを直接生成しましょう、となるのですが、Windows上のJRubyだとダメなんですねー。
どうやらJRubyがkindlegenのありかを見つけられないらしい。issueになっているのでそのうち直るかもしれませんが。
このissueが解決するまではWindows+JRubyの組み合わせはNGです。kindlegenはLinux版もあるのでLinux環境にするか、WindowsにRubyを入れてしまうか。Windows Subsystem for Linux (WSL)を使うのもいいかもしれません。
関連(するかもしれない)記事
おススメ