2011-08-05 9 views
0

私は1つの入力フィールドを持っています。ユーザーは国際ラング文字を含めたいものを書くことができます。問題1つのサーブレットから別のサーブレットにintr文字を転送する

最初のサーブレットがあります。

protected void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, 
     IOException { 
response.setContentType("text/html; charset=UTF-8"); 
PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true); 
out.println("<HTML><HEAD><TITLE>"); 
... 
out.println("<input type=text name=someText style='width:10em;'>"); 

サーブレットは、次のキーラインを持つ2番目のサーブレットに送信ボタンを進めます。

if(httpRequest.getCharacterEncoding() == null) 
      httpRequest.setCharacterEncoding("UTF-8"); 
String someText= httpRequest.getParameter("someText"); 

私のような奇妙な何かを得る:AAA°iÃüÃöÃçIıたときに、私は、デバッグを進めます。

私は間違っていますか?助けのための

おかげで、直接

httpRequest.setCharacterEncoding("UTF-8"); 

ヌルをチェックする必要はありませんとUTFへ

+0

あなたの 'PrintWriter'アプローチは不器用です。単にresponse.setCharacterEncoding( "UTF-8") '*を実行してから' response.getWriter() 'を取得するだけです。 'InputStreamReader'でラップする必要はありません。さらに、サーブレットでHTMLを出力することは非常に貧弱です。これはJSPで行う必要があります。 http://stackoverflow.com/tags/servlets/infoとhttp://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.htmlも参照してください。 – BalusC

答えて

1

セット文字コーディングは、それがnullになることはありません。 Container/AppserverはデフォルトのISO-8859-1を設定します。 これはあなたの問題を解決するはずです。

+0

あなたはutf-8を適切に設定することは絶対にできませんが、そのコード行を2番目のサーブレットでdoWorkに移動しなければなりませんでした。 私はエンコーディングを設定し、このメソッド内でutf-8を使って同様の処理を行っていました。何かをする前に設定する必要があったものを設定することは、私の問題を解決しました。 ありがとうございました。 btwあなたの提案に感謝しますが、サーブレットはそれを購入しませんでした:) – mechanicum

+0

5時間後、私は自分の投稿に答えることができません。ログインしていないので、 – mechanicum

-1
あなたのフォームに受け入れ-のcharset = 'UTF-8' を追加する必要があるかもしれません

: (何かのように:

<form accept-charset='UTF-8' ... > 

重要な注意:あなたが唯一の受け入れ-文字セットを使用する必要があります= 'UTF-8'ページをuft-8として送信した場合、フォームのエンコーディングをページとは別のものに変更しようとしないでください(これは、htmlの標準のfuckupのためにいくつかのブラウザで必要です。フォームを提出するために使用される指定されたエンコーディング)。

そして関連性のない注記:サーブレットからhtml出力を生成するためにout.printlnを使用しないでください。あなたはコードとHTMLを混在させますか?あなたのHTMLとJavaを分離するためにVelocityのようなツールを使用してください。

http://velocity.apache.org - あなたはそれを起動して1時間以内に実行できるはずです。

+0

は正常なブラウザでは動作しません。 MSIEでのみ動作し、それでも危険なバグがあります。 '

'を使わないでください。 – BalusC

+0

しかし、MSIEのバグのあるバージョンだけがそれを必要とします。他のすべてのブラウザは、ページと同じエンコードで返信するだけでよいことを知っています。それでは、私が追加してみましょう:あなたがUTF-8としてページを提供するならば、その受け取り側の文字セットを使用してください。それを使用して、エンコードをページとは異なるものに変更しようとします。 – MTilsted

+0

そしてFirefoxのいくつかのバージョンもそれを必要とします。私の "重要な注意"のセクションで指定されているように使用するのは安全です。 – MTilsted

関連する問題