Windowsヘルプ(いわゆるchmファイル)をSphinxから作るときに、文字コード関連でちょっと苦戦しました。
普通にやっているつもりが、文字化けしちゃうんですよね・・・。
結論を書いちゃうと、これでOKみたいです。
- conf.pyで、
language = 'ja'
という記述を入れておく - 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 %}
に変える。 - 日本語パッチのあたった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 件のコメント:
コメントを投稿