1

ポートレットメソッドáの応答で、特殊なラテン文字 (例: ) を返す必要があります。serveResource()私は次の方法を試しました:

response.setCharacterEncoding("ISO-8859-1") ;
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

また

response.setContentType("text/plain; charset=ISO-8859-1");
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

フロントエンドの XHR 呼び出し (serveResource url への) は、上記のいずれのアプローチからも正しい文字を取得しません。ただし、XHR がリクエストを HttpServlet にポストする場合 (上記とまったく同じレスポンス コードを使用)、問題なく動作します。

誰かがここの問題に光を当てることができますか?

4

2 に答える 2

1

意図したものではなく、ポートレットを含むページで指定された文字セットに従って、ブラウザが serveResource() 呼び出しからの応答を解釈している可能性はありますか? 正しい文字が返されている可能性がありますが、ブラウザがレンダリングすると、 serveResource() メソッドで設定した内容が無視され、ページの残りの部分と同じ文字セットで表示されます。

これは、ページの一部だけでなく、ページ全体をレンダリングする責任がある HttpServlet で問題なく動作する理由を説明している可能性があります。そのため、応答に文字エンコーディングを設定すると、その場合の取引が封印されます。

于 2009-11-08T21:15:03.900 に答える
0

私は...するだろう:

  • 結果の出力をディスクに保存し、16 進ダンプを実行します。ISO-8859-1 としてエンコードされた U+00e1 (á) の値は である必要がありますE1。その場合、クライアントでのデータの解釈方法に問題があります ( HTTP ヘッダーを確認してください)。そうでない場合は、データのエンコード方法に問題があります (UTF-8 としてエンコードされ、文字はバイトになりますC3 A1)。
  • 出力を に変更してみてくださいout.println(\u00E1");。これが機能する場合、コンパイラが Java ソースをロードして解釈する方法に問題があります。サーブレットが機能することを考えると、これはありそうにありません。
于 2009-11-08T22:14:40.723 に答える