JSPのお勉強-文字化け対策

先日に引き続き、JSPPostgresqlについて自分なりに調べたことの一部を書き留める。

今回はよくある「文字化け」について。

たとえば、テキストフォームに値を入力し、それを次の画面で用いることはよくあるはず。
しかし、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に変換するという作業を行っているようだ。

これを理解するの時間かかったなあ・・・


あと、研修中に聞かれることが多かったことは、JSPPostgresqlのレコードを読み込み・表示した際に、中のデータが2バイト文字だと文字化けが起きてしまうということ。

これを解決するためには、データベースを作る際の「エンコーディング」をUTF-8などに変更すること。
初期値がSQL_ASCIIであると、2バイト文字はまともに表示されません。

面倒くさいですねー

ってことで、今日はここまで


本日の教訓:「文字コードの設定は大切」