2007/10/16

Hudson(winstone)で日本語が文字化けたのをむりくり直す

CIツールとして個人的に大流行のHudson!
簡易httpサーバとしても利用できるので大変重宝している。

しかし、こやつを介して静的なHTMLを表示しようとすると
日本語が文字化けるんです…

HTML側でContent-Typeで「Shift_JIS」とかにしても
強制的に「ISO-8859-1」になってしまう。

なんか優先順があるのかなーと思ったらあった

確かにfirefoxのLiveHTTPheadersで見ると強制的に指定されている…

でもどこでHTTPのContent-Typeヘッダのcharsetパラメータを変えてるのかずっと探していた

が、どうやらwinstone↓が原因…
http://blog.cles.jp/item/2173
※clesさんありがとうございます

修正方法は2種類あるようだ、しかし↓にFilter変更は目的違いなのでは?と書いてあった
http://d.hatena.ne.jp/chinpeinet/20070919
※chinpeinetさんありがとうございます


なので、doGet()/doPost()を修正する方法でチャレンジ!

したのですがうまくいかない…


ひとまず強制的に「UTF-8」にするように変更してみた。


<1.winstoneのコードを取得>
・「winstone java」あたりでググってコードを持ってくる
・適当な場所で解凍
※今回は「winstone-src-0.9.9.tar.gz」を使った

<2.winstoneのコードを変更>
・Eclipse>ファイル>インポート>既存のプロジェクトをインポートでwinstoneを指定
・mavenの依存関係があるので「ビルドパス」で関係を削除
※使用しているjreのversionが直書きなので、異なっていたら変更
・src/java/winstone.WinstoneResponse.getCharacterEncoding()の「ISO-8859-1」を「UTF-8」に変更



・保存してコンパイル
・「winstone-src-0.9.9\build-eclipse\winstone\WinstoneResponse.class」をコピー

<3.hudson.warの解凍>
・hudson.warをzip解凍

<4.winstone.jarの再生成>
・hudson直下にあるwinstone.jarをzip解凍
・「winstone\winstone」に「2」でコピったファイルを上書きペースト
・winstoneフォルダで「jar cvfm winstone.jar META-INF\MANIFEST.MF .」
・winstoneフォルダにできた「winstone.jar」を取得

<5.hudson.warにwinstone.jarの配置>
・「3」のhudsonフォルダに「4」のwinstone.jarを上書き

<6.hudson.warの再生性>
・hudsonのソースを取得&解凍、直下にある「dummy.keystoreファイル」を取得して「3」に配置
ここからでも取得可
※今回は「hudson-1.146-src.zip」を使った
・以下のようなantスクリプト(build.xml)を作成して「3」に配置
<project name="hudson" default="war" basedir=".">
<target name="war">
<war destfile="hudson.war" webxml="WEB-INF/web.xml" manifest="META-INF/MANIFEST.MF">
<fileset dir="." excludes="META-INF/**,WEB-INF/**,build.xml,dummy.keystore,hudson.war" />
<metainf dir="META-INF" includes="maven/**"/>
<webinf dir="WEB-INF" includes="*" excludes="web.xml"/>
<lib dir="WEB-INF/lib" includes="*.jar"/>
</war>
<signjar jar="hudson.war" alias="hudson" keystore="dummy.keystore" storepass="hudson"/>
</target>
</project>

・コマンドラインから「ant」を実行

<7.hudson.warの起動>
・いつもと同じように「java -jar hudson.war」で起動


この方法だとfirefoxはうまく表示できたが、IE6では表示できなかった。

「2」の処理の時に「強制的にContent-Typeを指定しない」ように
修正をしたら、IE6でも文字化けしなかった。
(WinstoneResponse.validateHeaders():L242~253をコメントアウト)

表示方法をブラウザ側に委ねるので危険そうだ…

もうちょいよい修正方法はないものか…

0 件のコメント: