- PR -

getParameterで取得するデータの文字コード

1
投稿者投稿内容
Rose
会議室デビュー日: 2002/11/07
投稿数: 3
投稿日時: 2003-01-27 15:36
もしご存知の方がいらっしゃいましたらご教授下さい。

JSP→Servletでフォームのデータを取得しています。
テキストボックスに入力した文字をgetParameterで取得し、
以下のようにして文字コードを出力してみました。

----
String s = request.getParameter("str");
if( s != null ){
int hex;
for( int i=0; i<s.length(); ++i ){
hex = (int)s.charAt(i);
System.out.println(s.charAt(i) + ":[" + Integer.toHexString(hex)+ "]");
}
}
----

そこで、フォームのテキストボックス(name=str)に
「ア」を入力してからsubmitしてみたところ、

@
> ?:[83]
> A:[41]

A
> ア:[30a2]

の2パターン(SJIS・Unicode)が不規則に出力されてしまいます。
どちらか固定ならばまだわかるのですが、何故2パターンで取得
されてしまうのか、わかりません。

JSPのソースには
<%@ page contentType="text/html; charset=Shift_JIS" %>
と指定してありますし、HTMLの部分にも
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
と指定しています。

尚、サーバ環境は以下の通りです。
RedHat Linux 7.1
apache 1.3.27
Tomcat 3.3.1
jdk 1.3.1_06

どうぞよろしくお願い致します。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2003-01-27 16:31
> JSP→Servletでフォームのデータを取得しています。
> テキストボックスに入力した文字をgetParameterで取得し、
> 以下のようにして文字コードを出力してみました。

----
String s = request.getParameter("str");
if( s != null ){
int hex;
for( int i=0; i<s.length(); ++i ){
hex = (int)s.charAt(i);
System.out.println(s.charAt(i) + ":[" + Integer.toHexString(hex)+ "]");
}
}
----

コンテナの設定にもよりますが、
リクエストパラメータのデフォルト文字エンコーディングは「8859_1」です。
----
String s = request.getParameter("xxx");
if( s != null ){
s = new String(request.getParameter("xxx").getBytes("8859_1"), <エンコーディング文字セット>);
} else {
s = "";
}
----
といった感じで書けばよいのでは...

> JSPのソースには
> <%@ page contentType="text/html; charset=Shift_JIS" %>
> と指定してありますし、HTMLの部分にも
> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
> と指定しています。
これらのコードは、レスポンス時に必要となる文字エンコーディングの設定ですので、
件名にあるようなリクエスト情報の入力とは、何の関係もありません。
1

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