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"%>

因此,“消息”中的所有非 ASCII 字符都会出现乱码。我不想将我的 JVM 默认编码设置为 UTF-8,那么我该如何解决呢?我试着用

response.setCharacterEncoding("UTF-8");

在重定向之前在 Servlet 上,但它不起作用。当我尝试执行时:

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"));

您可能希望将样板代码重构为采用 aMap左右的实用方法。

请注意,我假设服务器也配置为使用 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"),因此可以解释为什么它没有效果。唯一的request.getCharacterEncoding()问题是 POST 请求正文,而不是 GET 请求 URI,因此与 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 回答