- PR -

サーブレットでの日本語の扱い方について

投稿者投稿内容
monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-05 02:16
はじめまして
servlet&jspでの日本語の処理についての質問です。

環境
j2sdk 1.4.2
redhat 9.0
tomcat 4.1.30

文字化けでは無いと思うのですが
フォーム(jspファイル)からpostされたデータ(日本語)をservletのgetPrameter系の
メソッドで取得すると、ヅ(数値文字参照)表記になっています。
(htmlファイルからの場合は問題ありません)

データベースに保存する処理で、普通の文字列に変換したいのですが、
方法がわからず困っております。

どなたかご教授頂けないでしょうか。 よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-05 02:27
setCharacterEncoding はしていますか?
http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/javax/servlet/http/HttpServletRequest.html

[ メッセージ編集済み 編集者: インギ 編集日時 2004-03-05 02:28 ]
monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-05 02:40
setCharacterEncoding はしていますか?

はい req.setCharacterEncoding(Shift_JIS) としておりまして
ブラウザでは普通の文字列でみることは出来るのですが、
ブラウザのソースを見ると〹になっています
monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-05 03:01
一部ソースを載せておきます

public void doPost( HttpServletRequest req,
HttpServletResponse res )
throws ServletException, IOException {

req.setCharacterEncoding("EUC-JP");
res.setContentType("text/html; charset=EUC-JP");
PrintWriter out = res.getWriter();

try {
Connection conn = null;
InitialContext ic = new InitialContext();
DataSource ds =
(DataSource)ic.lookup"java:/comp/env/jdbc/testdb");
conn = ds.getConnection();
String Hinmei = req.getParameter("hinmei");
String Nedan = req.getParameter("nedan");
int nedan = Integer.valueOf(Nedan).intValue();
Statement s = null;
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO shinamono VALUES('");
sql.append(Hinmei).append("', ");
sql.append(nedan).append(")");
s = conn.createStatement();
int atai = s.executeUpdate(sql.toString());
out.println("<html><body>");
out.println(sql.toString()); //INSERT INTO shinamono VALUES('みかん',100)
out.println("</body></html>"); //ブラウザでは上記のように表示さらるのですが
s.close();           //htmlのソースでは ...VALUES('&#12484;' ,100)  //とかに表示されます
}

Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-03-05 08:34
というかブラウザが実体指定で送りつけているみたいですね。
ブラウザは何をお使いですか?
monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-05 14:02
レスが遅くなってすみません。

サーバー側
ブラウザ: Mozilla/5.0(X11; u; Linux i686; ja.JP; rv; 1.2.1)Gecko/2003205
(redhat9.0に付いていたものです)
web server: tomcat4.1.30
javaVM: j2sdk1.4.2
OS: redhat 9.0

クライアント側
ブラウザ: IE6.0
OS: WINDOWS2000 SP4

サーバー自身のMozillaで表示した結果と、クライアントのIE6.0の実行結果は同じです。

データを入力するフォームのJSPファイル(input.jsp)のソースを載せておくので、
よろしくお願いします。


(入力フォーム)input.jsp
<html>
<head>
<meta http-equiv="content-type" content="text/html;chraset=EUC-JP" />
<title>input.html</title>
</head>
<body>
<form action="http://192.168.100.21:8080/taglib01/testServlet" method="POST">
hinmei: <input type="text" name="hinmei" />
nedan : <input type="text" name="nedan" />
<input type="submit" value="submit" />
</form>
</body>
</html>
monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-05 19:40
引用:

Anthyhimeさんの書き込み (2004-03-05 08:34) より:
というかブラウザが実体指定で送りつけているみたいですね。
ブラウザは何をお使いですか?



HTMLの文字参照についてネットで調べたことを書きます。

HTMLでの文字参照には、次の2種類あります。
1 符号化方式(文字コード)ex. shift_jis, euc_jpとか
この方式では利用する側の環境によって、全ての文字に対応していない。

2 SGML式文字参照 これには数値文字参照(&#12345;)、文字実体参照(&amp;)がある。
このうち数値文字参照を使うとHTML4.0以上のブラウザでは、特殊な文字も表現できる。
また、脆弱性の対策にもなる?ちょっとこの辺りわからないのですが...

で、入力フォームにJSPを使うと先進的な数値文字参照で扱うことになっており、
入力フォームにHTMLを使うと符号化方式(普通の文字列にJavaVM内で表現可能)で扱う
ことになっている。
そうだとすると、javaのAPIで数値文字参照から普通の文字列('あいう’)に変換する
APIが無いと困りますよねぇ...

Anthyhimeさんのおしゃるブラウザが実体指定で送りつけるとは、どういうことでしょうか?
知識不足でこの辺(本当はJava全部)がわからないので、よろしくお願いします。





monjirou
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-03-06 05:22
(入力フォーム)input.jspにページディレクティブを入れるとうまくいきました。
インギさんAnthyhimeさんありがとうございました。

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