2012年1月21日土曜日

Sphinx での文字化け対策

今回は前から気になっていた、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テーマを使っている場合は次のようにフォント設定を変更する。

文字化け対策の手順

  1. Sphinxがインストールされているフォルダを開く
    [Pythonフォルダ] → [Lib] → [site-packages] → [Sphinx-1.1.2-py2.7.egg] → [sphinx]
  2. sphinxdoc.css_t ファイルをコピー&ペーストする
    [sphinx] → [themes] → [sphinxdoc] → [static] フォルダーに sphinxdoc.css_t ファイルがあるのでコピーして、ドキュメントの [_static] フォルダに貼り付ける。
  3. ペーストした 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;
    
  4. make html コマンドで、htmlファイルを再作成する。
 

以上の対策で、文字化けが出なくなります。意外と単純な問題だったので、ちょっと拍子抜けしてしまいました。