JSPのお勉強-文字化け対策
先日に引き続き、JSPとPostgresqlについて自分なりに調べたことの一部を書き留める。
今回はよくある「文字化け」について。
たとえば、テキストフォームに値を入力し、それを次の画面で用いることはよくあるはず。
しかし、2バイト文字を使って行おうとすると文字化けした。
それを解決するための手順を記す。
ちなみに、JSP内部で文字コードは以下の通りに指定した。(pageEncoding, charset*2)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> (以下略)
入力した値などは、Formのbuttonやsubmitを使って渡す。(ちなみに自分はbutton派)
特に問題はない。
そして受け取る側では、きっと以下のものを使ってる人もいるはず。(パラメータ:titleの場合)
request.getParameter("title")
そこを、以下のように直すことで文字化けが解消された。
String setTitle = request.getParameter("title") setTitle = new String(setTitle.getBytes("8859_1"), "SHIFT-JIS");
SHIFT-JISの部分は、JSPで設定した文字コード次第で変わる。
これをする理由は、JSPの文字コードをSHIFT-JISなどにしたとしても、パラメータの受け渡しはISO-8859-1で行われる。
なので、そのまま受け取るとJSPはSHIFT-JISと思って受け取るが、実際はISO-8859-1であるため文字化けが起きるらしい。
それを解消するために、ISO-8859-1からSHIFT-JISに変換するという作業を行っているようだ。
これを理解するの時間かかったなあ・・・
あと、研修中に聞かれることが多かったことは、JSPにPostgresqlのレコードを読み込み・表示した際に、中のデータが2バイト文字だと文字化けが起きてしまうということ。
これを解決するためには、データベースを作る際の「エンコーディング」をUTF-8などに変更すること。
初期値がSQL_ASCIIであると、2バイト文字はまともに表示されません。
面倒くさいですねー
ってことで、今日はここまで
本日の教訓:「文字コードの設定は大切」