今回は前から気になっていた、Sphinxの文字化け対策について書きます。
Sphinxで作成されたドキュメントで時々、文字化けが発生していることに気づくことはないだろうか。もちろん、PC等の環境によって、全く発生しない場合と発生する場合があるようだ。
Sphinxの文字化け例
私の使用している PC は OS は Windows-Vista でブラウザーは Chrome だが、次のように文字化けが発生している。
ここまでは私の作ったドキュメントだが、他の方が作成したドキュメントでも文字化けが発生している。
Python 2.7ja1 ドキュメントそして、Sphinx日本語ドキュメントでも・・・。
Sphinxドキュメント 1.1この文字化けは法則性がなく、一旦発生すると更新してもタブを複製しても付いてくる。厄介な文字化けだ。正常に表示するには、新しいタブを開きURLをコピして再表示するしかない。
Sphinxのシステム上の不具合なのかなと悩んでいたのだが、これは実は単純な問題だった。
Sphinxでの文字化け対策
文字化けが発生しているドキュメントには共通点がある。フォントファミリーに Lucida Grande を使用しているのだ。実は Lucida Grande を使用すると文字化けが発生するという不具合があるようだ。
参考
教えてgoo! - ブラウザ閲覧時に、文字化けが発生します
日本向けのサイトでフォントにLucida Grandeを最初に指定してはいけない
このため、Sphinxの設定で Lucida Grande を使用しないようにすればよい。
Lucida Grandeを使用しているのはテーマがsphinxdoc のものだけなようなので、sphinxdocテーマを使っている場合は次のようにフォント設定を変更する。
文字化け対策の手順
- Sphinxがインストールされているフォルダを開く
[Pythonフォルダ] → [Lib] → [site-packages] → [Sphinx-1.1.2-py2.7.egg] → [sphinx] - sphinxdoc.css_t ファイルをコピー&ペーストする
[sphinx] → [themes] → [sphinxdoc] → [static] フォルダーに sphinxdoc.css_t ファイルがあるのでコピーして、ドキュメントの [_static] フォルダに貼り付ける。
- ペーストした sphinxdoc.css_t ファイルをテキストエディタで開き、font-family を変更する。
sphinxdoc.css_t には font-family の指定が4カ所あるので変更する。私は次のように変更した。
- bodyタグ指定、viewcode-backクラス指定
-
変更前
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif;
変更後font-family: 'Arial', 'Helvetica', sans-serif;
- cite, code, ttタグ指定、preタグ指定
-
変更前
font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
変更後font-family: 'Consolas', 'Courier New', monospace;
- make html コマンドで、htmlファイルを再作成する。
以上の対策で、文字化けが出なくなります。意外と単純な問題だったので、ちょっと拍子抜けしてしまいました。