- - PR -
サーブレットでの日本語の扱い方について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-05 02:16
はじめまして
servlet&jspでの日本語の処理についての質問です。 環境 j2sdk 1.4.2 redhat 9.0 tomcat 4.1.30 文字化けでは無いと思うのですが フォーム(jspファイル)からpostされたデータ(日本語)をservletのgetPrameter系の メソッドで取得すると、ヅ(数値文字参照)表記になっています。 (htmlファイルからの場合は問題ありません) データベースに保存する処理で、普通の文字列に変換したいのですが、 方法がわからず困っております。 どなたかご教授頂けないでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2004-03-05 02:40
setCharacterEncoding はしていますか?
はい req.setCharacterEncoding(Shift_JIS) としておりまして ブラウザでは普通の文字列でみることは出来るのですが、 ブラウザのソースを見ると〹になっています | ||||
|
投稿日時: 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) //とかに表示されます } | ||||
|
投稿日時: 2004-03-05 08:34
というかブラウザが実体指定で送りつけているみたいですね。
ブラウザは何をお使いですか? | ||||
|
投稿日時: 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> | ||||
|
投稿日時: 2004-03-05 19:40
HTMLの文字参照についてネットで調べたことを書きます。 HTMLでの文字参照には、次の2種類あります。 1 符号化方式(文字コード)ex. shift_jis, euc_jpとか この方式では利用する側の環境によって、全ての文字に対応していない。 2 SGML式文字参照 これには数値文字参照(&#12345;)、文字実体参照(&)がある。 このうち数値文字参照を使うとHTML4.0以上のブラウザでは、特殊な文字も表現できる。 また、脆弱性の対策にもなる?ちょっとこの辺りわからないのですが... で、入力フォームにJSPを使うと先進的な数値文字参照で扱うことになっており、 入力フォームにHTMLを使うと符号化方式(普通の文字列にJavaVM内で表現可能)で扱う ことになっている。 そうだとすると、javaのAPIで数値文字参照から普通の文字列('あいう’)に変換する APIが無いと困りますよねぇ... Anthyhimeさんのおしゃるブラウザが実体指定で送りつけるとは、どういうことでしょうか? 知識不足でこの辺(本当はJava全部)がわからないので、よろしくお願いします。 | ||||
|
投稿日時: 2004-03-06 05:22
(入力フォーム)input.jspにページディレクティブを入れるとうまくいきました。
インギさんAnthyhimeさんありがとうございました。 | ||||
