3

だから私は単純な方法で GET を使用してユーザーをリダイレクトしています:

response.sendRedirect("/path/index.jsp?type="+ e.getType() 
   +"&message="+ e.getMessage());

そして、実際のテキストがユーザーに表示されるように、メッセージを送信する必要があるまで、これはうまく機能していました。問題は、メッセージに非 ASCII 文字が含まれている場合です。私の .jsp ファイルは UTF-8 でエンコードされています。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

そのため、'message' の非 ASCII 文字はすべて文字化けします。JVM のデフォルト エンコーディングを UTF-8 に設定したくないのですが、どうすれば解決できますか? 使ってみた

response.setCharacterEncoding("UTF-8");

リダイレクトする前にサーブレットで実行しますが、機能しません。実行しようとすると:

out.print(request.getCharacterEncoding());

私の.jspファイルでは、「null」と出力されます。

4

2 に答える 2

9

このsendRedirect()メソッドは、クエリ文字列をエンコードしません。あなたはそれを自分でしなければなりません。

response.sendRedirect("/path/index.jsp?type=" + URLEncoder.encode(e.getType(), "UTF-8")
    + "&message=" + URLEncoder.encode(e.getMessage(), "UTF-8"));

定型文をユーティリティメソッドにリファクタリングしたいかもしれませんMap

サーバーは、UTF-8 を使用して GET 要求 URI をデコードするように構成されていることも想定しています。どちらを使用しているかはわかりませんでしたが、たとえばTomcatの場合、要素URIEncoding="UTF-8"に属性を追加するだけです。<Context>

以下も参照してください。


具体的な問題とは関係language="java"ありませんが、これはすでにデフォルトです。省略してください。は contentType="text/html; charset=UTF-8"、JSP で を使用する場合のデフォルトでもありますがpageEncoding="UTF-8"、省略してください。本当に必要なのは<%@ page pageEncoding="UTF-8"%>. これは実質的に と同じであることに注意してくださいresponse.setCharacterEncoding("UTF-8")。GET リクエストのrequest.getCharacterEncoding()URI ではなく、POST リクエストの本文にのみ関係するため、GET リクエストの場合は関係ありません。

于 2012-11-08T13:38:30.030 に答える
0

ありがとう... response.sendRedirect("/path/index.jsp?type=" + URLEncoder.encode(e.getType(), "UTF-8")を使用しているとき、私の問題は修正されました...

response.sendRedirect() を使用している場合: URLEncoder.encode() 関数によって URL をエンコードする必要があります。

再度、感謝します...

于 2014-04-08T07:28:03.507 に答える