BLOGTIMES
::
Home > Winstoneで日本語のHTMLを表示する
2007/09/02
[ by hsur at 22:04]

Winstoneで日本語のHTMLを表示する

  

Winstoneの簡易ウェブサーバー機能で日本語を表示させようとすると、Content-TypeヘッダがContent-Type:text/html; charset=iso-8859-1となっているために文字化けしてしまいます。いつもこれの解決方法を忘れて、ことあるたびに何度かはまっているのでメモ。

文字化けの発生メカニズム

ソースを見ると分かりますが、この簡易ウェブサーバーの実体はwinstone.StaticResourceServletというServletで実装されています。これはwinstone本体に組み込まれていて、指定されたURLがServletやJSPにマッピングできないときにデフォルトでこのServletを呼び出すようになっています。このサーブレットは該当のファイル名からContent-Typeを決定するようになっているのですが、文字コードについては考慮されていません。

文字コードを設定していない場合、winstoneのHttpServletRequestやHttpServletResponseの実装はiso-8859-1であると仮定してしまう*1ので、前述のようなContent-Typeが出力されて、ブラウザ側で文字化けが発生してしまうようです。

ServletなのでFilterが効く

これを回避するのためにはdoGet()/doPost()の処理内にrequest.setCharacterEncoding('UTF-8');のようなエンコーディングの設定をしてやればよいわけです。そのようにwinstone自体をリコンパイルしてもいいのですが、これもServletであることを考えるとFilterを使ったほうが賢明です。ということで、Tomcatのjsp-examplesのfilters/SetCharacterEncodingFilter.javaを使います。

web.xmlに以下の記述を追加


    <!-- filters -->
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    
    <!-- filter-mappings -->
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

これで日本語のファイルもきちんと表示できます。普段は自前のServletのためにSetCharacterEncodingFilterを入れておくことが多いので、その副作用で文字化けが直ってしまうために、いつもやり方を忘れるんですよね

  • *1: このあたりはServletのSpecでそうなっているのかな(未確認)
このエントリは役に立ちましたか?
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/2173
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン

Web Services by Yahoo! JAPANPowered by NP_SpamBayesJP
★下記に2つの英単語をスペースで区切って入力してください
::
Home > Winstoneで日本語のHTMLを表示する