まとまりのないブログ

something which something is something

jsp

ウェブブラウザの違いによる文字化け

投稿日:

ウェブアプリケーションを作成する場合には避けては通れない問題の一つに文字化けがある。日本語データをクライアントとサーバでやりとりする場合にはURLエンコードをする必要があるので、それをデコードしたりする場合に問題が高確率で発生する。jspによるウェブアプリケーション作成時にも文字化けの問題が発生したのでメモ。

クライアントからデータをpostする場合に、ブラウザによって文字が化ける場合と化けない場合がある。request.getParameter(“Value”)でクライアントから送られた日本語データをサーバで受け取った場合に通常の状態ではfirefoxでは文字化けせずに受け取ることができたが、その他のブラウザ(ie,opera,safari)では文字化けが発生してしまった。サーバ側でrequest.getCharacterEncoding()の値を確認してみたところ、firefoxには文字コードが指定されていたが、その他のブラウザの場合は値がnullとなっていた。ならば、サーバ側でrequest.setCharacterEncoding(“UTF-8”)とすれば問題解決かと思ったけれど、そう簡単な問題でなく、サーバにリクエストが届く前にcharacterencodeingを指定しなければならない模様。

解決方法は、フィルタークラスを使って、リクエストの文字コードを指定してあげることで解決をすることができる。つまりviewからcontrollerへ命令を出す前に、文字コードの指定をしてからcontrollerへ値を渡すということになる。他にセンスが悪い解決方法としては、requestの環境変数からブラウザを判別して、問題のあるブラウザのみ文字コードの変換をするというのもあるけれど、これはブラウザの挙動を逐一チェックしなければならないので解決策が見つからない場合の最後の手段。とりあえずpostデータの文字化け問題はフィルタークラスを通すことで解決をすることが可能。

参考サイト

JavaでHello World サーブレット(フィルタ)編
http://www.hellohiro.com/filter.htm

-jsp

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

JAVAサーブレットクラスの初期化

JAVAサーブレットのクラスを初期化するときの方法について何種類かあるので迷ったので覚書き。 かんたんなサーブレットクラスを作ってテストしてみた。 public class InitTest exte …

no image

mysqlへjdbc接続した場合に文字化けが発生する

私の環境の場合は文字コードは全てutf-8で運用していたけれど、jspのフォームからパラメータを送って、サーブレットでsqlのinsert文を実行し、結果が正しく反映されているかどうかmysql co …

no image

Javaによるデータのソート方法についての考え – 異なるデータ形式を一つのものとしてソートする場合

データ形式が違う2つのものを合体させてからソートをするというような時,どういう方法があり得るかというのをなんとなく考えてみた。例えば,xml形式のデータと,sql発行の結果データなど,違う形式のデータ …

no image

Operation not allowed after ResultSet closed

mysqlにselect文を投げてその結果をresultsetオブジェクトに格納して、その内容をjspページに表示させようとしたときにOperation not allowed after Resul …

no image

eclipseでtomcatプロジェクトの作成

Javaとtomcatはインストール済みであることを前提とする。 eclipseのインストール eclipseの日本語化 tomcatプラグインをeclipseにインストール tomcatプロジェクト …