- PR -

HTTP通信での文字コードについて

1
投稿者投稿内容
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 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 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-08-09 01:03
引用:

ペーぺー01さんの書き込み (2007-08-09 00:06) より:
PrintWriter printWriter = new PrintWriter(conn.getOutputStream());
printWriter.print(parameterString);
printWriter.close();


PrintWriterのOutputStreamを引数に取るコンストラクタは、
VMのデフォルトの文字セットで出力するからです。

Shift_JISなら化けないということは、
クライアント側のデフォルトがShift_JISなんでしょう。
#たぶんWindowsだから、厳密にはWindows-31Jが正解。

OutputStreamと文字セット名を与えられるオーバーロードは
ないようなので、OutputStreamWriterと組み合わせましょう。
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2007-08-09 21:53
あしゅさん

回答ありがとうございました。
指摘どおり、encode指定もれてます・w・;
OutputStreamWriterでUTF-8指定でうまくいきました。

ありがとうございます
1

スキルアップ/キャリアアップ(JOB@IT)