| No.087 | 投稿日時: | 2003/08/22(金) 21:02 <↑親記事:No.086> |
| 投稿者: | 森山 将之 |
松岡さん、ご報告ありがとうございます。
> 教えていただいたHPで試してみましたが、文字化けの解消は出来ませんでした。
最初の質問の際に、今回の「発生状況」を書いていただければよかったと思います。
こちらから不明な点をお聞きするという事も可能でしたが、最近、こちらからの
問いには答えないという人がいたため、尻切れトンボにならないように、考えられ
るケースを想定してお答えしました。
> しかし、URLエンコードを行うと解消できましたので、以下に文字化けの発生する条件と解決方法を記述させていただきます。
>
> 【発生条件】
> ・SERVLETからJSPへデータを一覧表示させ、一覧からリンクで詳細画面を
> 新しいウインドウで開く。その際にキー項目をSERVLETへ受渡す。
> (このキー項目の中に半角カナ文字が含まれる。)
> ・ウインドウを新しく開く為、GETで送信しなければならない。
> (POSTで受渡をすると文字化けは発生しない。)
> ・JSPではCp943Cの文字コードを設定。
>
> 【解決方法】
> ==JSP側の処理==
> ・JSPにて java.net.* のインポートを行う。
> ・送信するキー項目をURLEncoder.encodeでエンコードを行う。
> (子ウインドウのアドレス→[http://www・・・Servlet?KEY=%8E%CB・・])
GETメソッドでの URIエスケープ は、半角カナが含まれているかどうかにかかわ
らず必要です。
> ==SERVLET側の処理==
> ・バイト文字列がSHIFT-JISで変換されてしまったいるため、EUC-JPに変換する。
> value = new String(value.getBytes("Shift_JIS") ,"EUC-JP");
入力文字コードを指定しているのは良い点ですね。
ただ、EUC-JP に変換するとなると、JSP では、Cp943C でいわゆる機種依存文字
が扱えるけれども、Servlet では扱えないという事になってしまうと思います。
いわゆる機種依存文字の取り扱いは、ソフト毎にバラバラなので、下手に対応す
ると泥沼にはまりますから、あまり良く分からない場合は、Cp943C ではなく、
Shift_JIS を使っておいたほうがいいかもしれません。
IBMのソフトは、Cp943C を使い、MSのソフトを MS932 を使っているという事も、
非常に問題をややこしくしているので、十分に違いを調べた上で事前にどこが
問題になりそうかチェックしておいた方がいいですね。