Asciidoctor EPUB3で作ったepubをmobiに変換すると文字化けする

2018/01/26

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)を使うのもいいかもしれません。




関連(するかもしれない)記事


おススメ