2012年4月13日金曜日

Sphinxでhtmlhelpを出力するときの注意点

仕事でSphinxを使いはじめています。
Windowsヘルプ(いわゆるchmファイル)をSphinxから作るときに、文字コード関連でちょっと苦戦しました。

普通にやっているつもりが、文字化けしちゃうんですよね・・・。


結論を書いちゃうと、これでOKみたいです。
  1. conf.pyで、
    language = 'ja'
    という記述を入れておく
  2.  sphinx\themes\layout.htmlを修正する。
    83行目:
        <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
    を、
        {%- if encoding == 'cp932' %}
        <meta http-equiv="Content-Type" content="text/html; charset=shift-jis" />
        {%- else %}
        <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
        {%- endif %}
    に変える。
  3. 日本語パッチのあたったSphinxを使う




まず、Html Help Workshop が、シフトJISしか受け付けない(!)ので、
どうやってSphinxからシフトJISで出力させれば良いのか、っていう話になるわけです。


sphinx\builders\htmlhelp.py

を見ると、languageの値で、辞書を見て、エンコードする文字コードを決定していますね。
language == 'ja' だと、文字コードにcp932が選ばれるので、一件落着。


・・・と思ったら、hhc.exeが作るchmファイルを開くと、中身が文字化け。

いろいろページを遷移させると文字化けが直ったりしましたが、どうも不安定。
挙動からして、IEのエンジンが文字コードをうまく判別できていない?


htmlhelpで出力しているhtmlを見ると原因が判明。

<meta http-equiv="Content-Type" content="text/html; charset=cp932" />

IEって、cp932とかいわれても理解できないんですよね・・・。
MSがshift-jisを独自拡張したのがcp932な訳ですが、MS的には、これはshift-jisだと主張している訳で。

つまり、
<meta http-equiv="Content-Type" content="text/html; charset=shift-jis" />
にしてあげれば良い。

継承先のテンプレートでいじれば良いんじゃね?と思ったら、
ブロックの外に書いてあって、継承先ではいじれない。

というわけで、大元のlayout.htmlを修正。
むー、4時間くらい使ってしまった(orz)


職場内で展開することを考えると、layout.htmlの修正は、独自のテンプレートしてまとめた方が良い気はする。

0 件のコメント:

コメントを投稿