2009-09-03 3 views
1

私はJSPスクリプトを使っていくつかのウェブサイトをプログラミングしています。私はurlencoded Web-Formularパラメータで奇妙な問題に遭遇しました。サイト自体はiso-8859-1でエンコードされています。URLエンコードされたウムラウトを取得できません。 [ソリューション:use UTF8]

私はdescriptionと呼ばれるフィールドを持つ簡単なウェブフォームを持っています。

"ü"や "ß"のようなドイツのウムラウトやスペシャルカーを入力すると、自動的にURLがエンコードされます。しかし、私がこのパラメータを読みたいなら、私はいつもnullを得ます。私はいくつかの中国語の単語を入力した場合

String description = request.getParameter("description"); 

專業人士のように、彼らはあまりにも、URLエンコードされています。しかし、私はnullを検索せずにそれらを読むことができます。

この動作は、メソッドとして「投稿」または「取得」を使用しても変更されません。 私は以下の文章を使って私のウェブフォームを "ポンピング"しようとしましたが、それは役に立たなかった。

accept-charset="ISO-8859-1" enctype="application/x-www-form-urlencoded" 

私の質問は: のはなぜURLエンコードドイツ語のウムラウトが、いくつかの中国語の単語を取得することはできませんか?

+0

説明は常にハードコードされた文字列「説明」とは? –

+0

はい、常に同じ文字列です。 – Johannes

答えて

1

ISO-8859-1の中国語は動作しませんが、ドイツ語はすべきです。とにかくchineeseがエンコードされている場合は、フォームがUTF-8でエンコードされている可能性がありますか?どのブラウザを使うのですか? JSPのエンコーディングとは何ですか?ラテン1ではなく、常にUFT-8を使用してください。すべてのブラウザとサーバーは、すべてのOSでUTF-8をサポートする必要があります。

私の経験では、エンコードにはうまくいきませんが、POSTで行うべきです。フォームパラメータaccept-charsetとenctypeは正しいです。どのサーバーを使用していますか?

JSPのコンテンツタイプは、通常によって設定されます。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
         pageEncoding="ISO-8859-1" %> 
+0

ラテン1は「時代遅れ」だと知っていますが、私はいくつかのレガシーシステムに固執しています。UFT-8に切り替えることはできますが、それは簡単ではありません。 ファイル自体のエンコーディング、メタタグ、ページ・ディレクティブはすべてiso-8859-1に設定されています。 <%@ page contentType = "text/html; charset = ISO-8859-1"%> <% request.setCharacterEncoding( "ISO-8859-1"); response.setCharacterEncoding( "ISO-8859-1"); %> ブラウザ:IIS +樹脂(caucho.comからのJava EEサーバ)このフォームの GETは、テストのためだけにだった:あなたは サーバーを望むもののFirefox、IE 6、サファリ、オペラ..私はPOSTも好きです。 ご協力いただきありがとうございます。 – Johannes

+0

このように要求または応答のエンコーディングを設定しないでください。ページのcontentTypeだけです。 –

+0

ありがとう!私は明日それを試してみるでしょう。 これらのエンコーディングをpage-directiveで設定する方が良いのはなぜですか? – Johannes

1

あなたのページまたはサーブレットのエンコーディングがUTF-8であると思われます。 Latin-1でエンコードされたUmlautは無効なUTF-8シーケンスなので、NULLを取得します。

中国語を入力すると、ブラウザーはLatin-1でこれをエンコードできないので、自動的にUTF-8に変更されます。それが中国の作品です。

HTTPトレースを送信できる場合は、これを確認できます。

関連する問題