3 回答
TA贡献1862条经验 获得超6个赞
我只想补充一点(当然,对于POST方法来说)
request.setCharacterEncoding("UTF-8");
在读取任何参数之前调用。以下是读取参数的实现方式:
@Overridepublic String getParameter(String name) { if (!parametersParsed) { parseParameters(); } return coyoteRequest.getParameters().getParameter(name);}
如你所见,有一面旗帜参数分析这是在第一次读取任何参数时设置的,parseParameters()方法将解析所有请求的参数并设置编码。呼叫:
request.setCharacterEncoding("UTF-8");
在对参数进行解析后,不会产生任何影响!这就是为什么有些人抱怨设置请求的编码不起作用。这里的大多数答案都建议使用servlet过滤器并在那里设置字符编码。这是正确的,但也要注意,一些安全库可以在筛选器之前读取请求参数(这是我的情况),因此如果在此之后执行筛选器,则请求参数的字符编码已经设置,设置UTF-8或任何其他参数都不会产生任何效果。
TA贡献1828条经验 获得超4个赞
如果根本没有正确设置请求和/或响应编码,就会发生这种情况。
对于GET请求,需要在servlet容器级别配置它。目前还不清楚您使用的是哪一种,但例如Tomcat,这是由URIEncoding
属性<Connector>
元素/conf/server.xml
.
<Connector ... URIEncoding="UTF-8">
对于POST请求,您需要创建一个滤光器它被映射到所需的URL模式上,涵盖所有这些POST请求。例如:*.jsp
甚至/*
..执行以下工作doFilter()
:
request.setCharacterEncoding("UTF-8");chain.doFilter(request, response);
对于提交的HTML表单输入值的HTML响应和客户端编码,您需要设置JSP页面编码。将其添加到JSP的顶部(考虑到显示UTF-8直表格DB的效果很好,您可能已经正确地完成了这一工作)。
<%@page pageEncoding="UTF-8" %>
或者,为了防止在每一个JSP上复制它,只需在web.xml
:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> </jsp-property-group></jsp-config>
对于源代码文件和stdout(IDE控制台),需要设置IDE工作区编码。目前还不清楚您使用的是哪一种,但例如,Eclipse要通过设置窗口>首选项>通用>工作区>文本文件编码去UTF-8。
请注意HTML<meta http-equiv>
标签是被忽视当通过HTTP服务页面时。只有当页面从本地磁盘文件系统打开时,才会考虑file://
..还指定<form accept-charset>
没有必要,因为它已经默认为在为表单服务HTML页面时使用的响应编码。
添加回答
举报