UTF-8 -> Windows-31J。スクリプトもUTF-8のままで。

回避策
リンク元のHTMLの文字コードをShift JISにてエンコードしてください。

http://support.microsoft.com/default.aspx?scid=kb;ja;896315 より

結構知られていると思うけど、IEUTF-8のHTMLを使うとリンクをクリックしたときにおかしくなる。回避策はShift JISにするしかないらしい。


で、Tapestryの細かい話。バージョンは3.0.3ね。4.0は分からん。
出力をWindows-31Jにしたいなら .applicationファイルにorg.apache.tapestry.output-encoding に Windows-31Jと書けばいいんだけど、それだけだとjavascriptエンコードまでは指定してくれない。当たり前か。
http://blog.inetplus.jp/MT/Tapestry/archives/2004/07/24104535.html


HTML中のscriptタグは、何も指定しないとHTML自身のcharsetでスクリプトをロードするので、jsファイルもUTF-8だったりする場合、以下のようにcharsetを指定する必要がある。

<script language="JavaScript" charset="UTF-8" ・・・/>

残念ながらTapestryには、これを指定する方法は見つからなかったので、自分で出力するようにするしかない。scriptタグを出力しているのはorg.apache.tapestry.html.BodyクラスのwriteScriptメソッドなので、ここを適当な文字セットをcharsetとして出力できるようなorg.apache.tapestry.html.Bodyを拡張したクラスを作るしかないっぽいっす。