[UPDATE2]Kindle3はやはり日本語ハックが必要なのか?

Kindle3は公式に日本語表示対応(フォント埋め込みしていないPDF形式を除く)していますので、Kindle2/DXで日本語表示のために必要とされていたJailBreak/フォントハックは不要かと思っていました。InstapaperからMOBI形式ファイルを取得してKindle2で表示させる方法(KindleとInstapaperの絶妙な組み合わせ)について、Kindle3での動作確認をしていたところ、残念ながら一部の日本語が文字化けして表示されていました(フォントハック済Kindle2では正しく表示されていることを確認しています)。

IMG_0262

Kindle2にはネイティブのフォントには日本語が組み込まれていなかったため、FontForge等で既存フォントファイルに日本語フォントを合成して自作したもので日本語を表示させていました。Kindle3には次の日本語フォントが用意されています。

  • HeiSeiMaruGoth213_E.ttf
  • HeiSeiMaruGoth213_E_Bold.ttf

Kindle3の英語フォントには日本語で用意されている”plain”と”bold”のほかに、”italic”と”bold italic”があります。今回の文字化けがたまたまMOBI形式ファイルがおかしいために生じたのか、Kindle3内部で代替フォントを適用する変換がおかしいのかわかりませんが、ある条件下では文字化けが発生してしまうようです。


instapaper-font-bake-article

解消方法は、Kindle3の英語フォントに日本語も組み込んでフォントファイルを自作する、またはfont.propertiesの設定を修正してでごまかすかでしょうか。いずれにしてもノーマルなKindle3では不可能ですから、今のFWですとroot化したKindle3が必要となります。ちょっとハードルが高そうです。一番よいのは米AmazonがFWアップデートで対応してくれることなのですが。。。

Updated on October 7, 2010-----
Instapaperから取り込むmobiファイルを表示させると一部文字化けしてしまいますが原因がわかりました。Kindle3からは日本語フォントが実装されていますが、mobiファイル側で指定するフォントに日本語が含まれないため文字化けが発生してしまいます。以下の作業はシリアル接続環境をお勧めします。USBNetworkハックでも可能ですが文鎮化した場合にリカバリーができなくなりますのでご注意ください。作業の前にfont.propertiesはバックアップをとりましょう。

フォントに関する設定ファイル
/usr/java/lib/font.properties
フォントファイルの格納場所
/usr/java/lib/fonts/

Instapaperのインデックス部分の文字化け(一番上の写真)
mobiファイル側ではSerifフォントを参照しており、Kindle側ではfont.propertiesにてCaecilia系フォントを指定していて、日本語が含まれていないため文字化けします。特にここで指定されているのはboldなので、font.propertiesにてserif.1とserif.boldをHeiSeiMaruGoth213_E_Bold.ttfに差し替えれば文字化けは解消します。

Instapaperの本文部分の文字化け(スクリーンショット画像)
同様にmobi側で日本語が含まれないフォントを指定しているために文字化けが発生するようです。インデックスとは異なり、Sans Serifフォントで使用されているHelvetica系フォントです。italic boldなので、font.propertiesのsansserif.3とsansserif.italicboldをHeiSeiMaruGoth213_E_Bold.ttfに差し替えれば文字化けが解消します。

残念ながら、現時点のKindle3には日本語フォントは平成丸ゴシックのplainとboldしかありません。従ってitalicやitalic boldを表現することができません。最低限文字化けしないようにすることは可能ですが、アルファベットも平成丸ゴシックになってしまい洋書を読むのに雰囲気が台無しになります。フォントを自作したくなってしまいますね。

Updated on October 8, 2010-----
KindleのアプリケーションはJava プラットフォームなので物理フォントと論理フォントが存在します。物理フォントは実際のフォントライブラリであり、論理フォントは Java プラットフォームで定義されているSerif、SansSerif、Monospaced、Dialog、DialogInput の 5 つのフォントファミリです。このマッピングを行っているのが”font.properties”であり、物理フォントはfontsディレクトリに格納されています。

Serif Font
Caecilia_LT_65_Medium.ttf
Caecilia_LT_75_Bold.ttf
Caecilia_LT_66_Medium_Italic.ttf
Caecilia_LT_76_Bold=Italic.ttf

SansSerif Font
Helvetica_LT_65_Medium.ttf
Helvetica_LT_75_Bold.ttf
Helvetica_LT_66_Medium_Italic.ttf
Helvetica_LT_76_Bold_Italic.ttf

Monospaced
KindleBlackboxRegular.ttf
KindleBlackboxBold.ttf
KindleBlackboxItalic.ttf
KindleBlackboxBoldItalic.ttf

Dialog
Helvetica_LT_65_Medium.ttf
Helvetica_LT_75_Bold.ttf
Helvetica_LT_66_Medium_Italic.ttf
Helvetica_LT_76_Bold_Italic.ttf

DialogInput
Helvetica_LT_65_Medium.ttf
Helvetica_LT_75_Bold.ttf
Helvetica_LT_66_Medium_Italic.ttf
Helvetica_LT_76_Bold_Italic.ttf

Kindle3の上記の物理フォントライブラリには日本語が含まれておらず、HeiSeiMaruGoth213_E.ttf、HeiSeiMaruGoth213_E_Bold.ttfが用意されております。他の言語もありますので、どのように上記のフォントに差し替えて適用しているのかわかりませんが、ロケール設定かCharsetで識別しているのかもしれません。

日本語が文字化けする原因として考えられるのはmobi等に変換されファイルの本文以外の特定箇所が多言語ファイルに差し替える対象から漏れているために発生してしまうのではないかと思います。この事象がバグなのか分かりませんが、Kindle Storeで日本語書籍の取扱いも噂されており、これが事実とすればこの事象については改善してもらわないとクオリティとしては許容できないような気がします。

Update Information—
[2010年10月7日] Instapaperで変換したmobiファイルの文字化けするフォントを追記
[2010年10月8日] Kindle3のフォントライブラリについて追記