Hof*_*ann 3 java jsp servlets utf-8 character-encoding
所以我以一种天真的方式使用GET重定向我的用户:
response.sendRedirect("/path/index.jsp?type="+ e.getType()
+"&message="+ e.getMessage());
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到我不得不发送消息,作为向用户显示的实际文本.问题是如果消息中包含非ASCII字符.我的.jsp文件以UTF-8编码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
因此'message'中的所有非ASCII字符都会出现乱码.我不想将我的JVM默认编码设置为UTF-8,那么我该如何解决这个问题呢?我试着用
response.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
在重定向之前的Servlet上,但它不起作用.当我尝试执行时:
out.print(request.getCharacterEncoding());
Run Code Online (Sandbox Code Playgroud)
在我的.jsp文件中,它打印'null'.
该sendRedirect()
方法不会为您编码查询字符串.你自己去做.
response.sendRedirect("/path/index.jsp?type=" + URLEncoder.encode(e.getType(), "UTF-8")
+ "&message=" + URLEncoder.encode(e.getMessage(), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
您可能希望将样板重构为实用方法,需要大约一个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请求的情况无关.
归档时间: |
|
查看次数: |
8965 次 |
最近记录: |