所以我以天真的方式使用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");
重定向之前在Servlet上的,但它不起作用。当我尝试执行时:
out.print(request.getCharacterEncoding());
在我的.jsp文件中打印'null'。
答案 0 :(得分:7)
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")
实际上有效,因此可以解释为什么它没有效果。 request.getCharacterEncoding()
仅涉及POST请求正文,而不是GET请求URI,因此在GET请求的情况下它是无关紧要的。
答案 1 :(得分:0)
谢谢你...当我使用 response.sendRedirect(“/ path / index.jsp?type =”+ URLEncoder.encode(e.getType(),“UTF-8”),我的问题得到解决......
当我们使用response.sendRedirect()时:我们应该通过URLEncoder.encode()函数对URL进行编码然后才会编码..它将被正确编码..
再次感谢...