- - PR -
HTTP通信での文字コードについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-09 00:06
こんにちは
HTTP通信での文字コードについて質問です。 クライアントからサーバーに値を送信するときに Content-Typeに「application/x-www-form-urlencoded; charset=UTF8"」を指定してマルチバイトの文字を送信した場合 サーバー側で受け取ると文字化けしてしまいます・・・ ちなみにShift_JISにしてみたら、文字化けしませんでした・・・ @なぜ文字化けするのでしょうか? Aどのような対応をすると文字化けを回避できるのでしょうか? 自分の認識ではUTF-8であれば、マルチバイトの文字も扱えるはず・・・ アプリケーションサーバー:tomcat 5.0 javaVer:1.5 クライアント:HttpURLConnection ****以下コードです****** URL url = new URL("http://localhost:8080/sandbox/encodeServerServlet"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF8"); conn.setDoOutput(true); conn.setRequestMethod("POST"); String target = "テスト"; String parameterString = new String("parameter1=value1¶meter2=value2&target="+target); PrintWriter printWriter = new PrintWriter(conn.getOutputStream()); printWriter.print(parameterString); printWriter.close(); conn.connect(); InputStream is = conn.getInputStream(); conn.disconnect(); [ メッセージ編集済み 編集者: ペーぺー01 編集日時 2007-08-09 00:40 ] | ||||
|
投稿日時: 2007-08-09 01:03
PrintWriterのOutputStreamを引数に取るコンストラクタは、 VMのデフォルトの文字セットで出力するからです。 Shift_JISなら化けないということは、 クライアント側のデフォルトがShift_JISなんでしょう。 #たぶんWindowsだから、厳密にはWindows-31Jが正解。 OutputStreamと文字セット名を与えられるオーバーロードは ないようなので、OutputStreamWriterと組み合わせましょう。 | ||||
|
投稿日時: 2007-08-09 21:53
あしゅさん
回答ありがとうございました。 指摘どおり、encode指定もれてます・w・; OutputStreamWriterでUTF-8指定でうまくいきました。 ありがとうございます |
1