在使用HttpServletRequest.getParameter(String name)时我们可能会取得中文的乱码。
问题描述:
当利用getParameter()方法去取HTML元素中value值时当元素的value值为中文时用该方法取到的值可能为乱码。这时候我们需要的取得它的中文。
a) 方法一
在利用getParameter方法之前添加如下语句
request.setCharacterEncoding("utf_8");
相对来说用起来比较方便而且对提交方式没有限制。
b) 方法二
如果是get方式提交有中文,楼主还可以去tomcat 的server.xml配置文件里在<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
中加上URIEncoding="GB2312"即可。
缺点:无法解决用post方式提交时的中午乱码
c) 方法三
String kind = new String(request.getParameter("RBLkind").getBytes("iso-8859-1"), "utf-8");但是这个方法只能针对一行一行代码修改要是你要多次利用getParameter方法取
值时要多次输入此行代码比较麻烦。
d) 过滤器(Filter)
在使用过滤器解决乱码问题是form表单的提交方式一定要设为POST默认的是GET。
在web.xml里面加过滤器遇上全部的jsp、servlet、do等所有乱码问题都得消失哈。
(1)、先在项目的src中servlt包添加一个过滤器代码如下
package servlet;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public final class CharacterEncodingFilter implements Filter
{
private String encoding;
private boolean ignore;
public CharacterEncodingFilter()
{
encoding = "utf-8";
ignore = false;
}
public void init(FilterConfig config)
{
if (config.getInitParameter("encoding") != null)
encoding = config.getInitParameter("encoding");
if (config.getInitParameter("ignore") != null)
ignore = (new
Boolean(config.getInitParameter("ignore")))
.booleanValue();
}
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (!ignore)
{
req.setCharacterEncoding(encoding);
res.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void destroy()
{
}
}
(2)、在web.xml里面添加过滤器filter
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>servlet.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 过滤所有的jsp文件 -->
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!-- 过滤所有的servlet文件 -->
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样所有的request.getparameter都会经过这个过滤器处理乱码问题就没有了而且可以
任意修改<param-value>UTF-8</param-value>不过本人还是较为推荐UTF-8。