Pebble日本語化&改造ログ
  全カテゴリ | Blog News | Bugs | Changes | Other Blogware
 
<< ビジネスブログブック2 | Home | VAIO type BX >>
Tagsでの日本語処理まとめ

GETメソッドでの日本語処理でゴタゴタしてたところの整理。
結局バグではなく、環境の違いで混乱しただけの模様^^;

HTMLフォームからGETメソッド日本語を送信した場合、

・ブラウザはヘッダーに文字コード情報はつけ(られ)ない
・Tomcatは、URLデコードしてISO-8859-1固定で渡される
 <request.getCharacterEncoding() がたぶん null>
・なので処理する文字コードにプログラムで変換する

これは常套手段となっています。当然URIだけでは文字コードが判別できないので間違っていないと言えます。

しかし、このブログもそうですが、URLにクエリパラメータが入るのを嫌って「/」だけのシンプルなURLから「?param1=xxxx&param2=yyyy」にフィルタを使って変換してフォワードするわけです。

例(Pebbleまんまです)
URL:/tags/%E5%9C%B0
フォワード:/search.action?query=tag:%E5%9C%B0

この際にTomcatはヘッダに文字コード情報をくっつけてフォワードするため、次に受け取った際にはTomcat(HttpServletRequest)が変換してUTF-8などになって渡されるくることがあるわけです。ただしTomcat単体で動作させている場合です。
 <request.getCharacterEncoding() が "UTF-8">

これ(UTF-8)をISO-8859-1だと思って取り出すと文字化けが発生します。
例:new String(query.getBytes("8859_1"), "UTF-8");

これはqueryがUTF-8なら当然ダメですね。

※ここでTomcatが文字コードをつけて・・・と書きましたが実際はフィルタ内のプログラムでフォワードする際にセットしているのです。
request.setCharacterEncoding("UTF-8とか");
これをしないと他に問題がでそうで、取るに取れない。。

次に、ApacheをJKコネクタなどで接続した環境でフォワードすると、処理するのはApacheとなり、ここでデフォルトの文字セット(ISO-8859-1)に変換されてしまうようです。
 <request.getCharacterEncoding() が null か ISO-8859-1>

Pebbleのタグは上記のフィルタで処理されています。
そして今回、開発環境はTomcat単体でテストしていたため、わけがわからなくてTomcatのバージョンを疑ったりと、かなり遠回りをしてしまいました。

今度はPebbleをインストールタグ : pebble, java
コメント追加

タイトル
名前
E-mail
Webサイト
本文
情報保存 する  しない
  • 情報保存をすると次回からお名前等を入力する手間が省けます。
  • E-mailは公開されません - このエントリーの新規コメント通知が必要なら記入します。

このエントリーのトラックバックURLを表示