Java语言默认的编码方式是UNICODE,而我们中国人通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的
不管是Jsp还是页面还是数据库都有自己的默认的获取参数的编码类型,如果传入的参数类型与获取的编码类型不一致就会导致乱码问题。
Jsp传值到页面时乱码
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")
或response.setContentType("text/html;charset=gb2312"
或new String(str.getBytes("ISO-8859-1"),"GBK")以iso-8859-1编码方式转化成字节数组,而“GBK”是目标编码方式。
页面传值到Jsp时乱码
解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。
Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,
如:mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
还有一种比较全能的办法是加过滤器(不是万能的)
这是java文件代码(java文件拷贝后就可用,配置按提示配完就可)
package com.xfht.struts.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CharacterFilter extends HttpServlet implements Filter{
public void init(FilterConfig filterconfig) throws ServletException
{
//init 方法在整个过滤器的生命周期中仅执行一次, init() 方法有一个 FilterConfig 参数,该参数用于保存与 Filter 配置相关的数据信息
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException,IOException {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");//设置编码
filterChain.doFilter(request, response);
}
//ServletRequest 定义一个对象,用于封装用户的请求。ServletResponse 定义一个对象,用于封装用户的响应。FilterChain 用于调用过滤器链中的下一个过滤器。
}
过滤器XML配置如下:
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>包.类名</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>