潜心学习 技术强身

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  14 随笔 :: 0 文章 :: 8 评论 :: 0 Trackbacks
    主要是mysql数据库乱码问题,关于网页中的乱码(JSP页面乱码,action乱码)都好解决,只要页面的编码统一就可以了。我比较喜欢用UTF-8编码,不是很喜欢GBK或GB2312编码。
      关于JSP页面及action只需添加一个EncodingFilter就可以了,代码如下:
 1package cn.zhang.myznt.filter;
 2
 3import java.io.IOException;
 4
 5import javax.servlet.Filter;
 6import javax.servlet.FilterChain;
 7import javax.servlet.FilterConfig;
 8import javax.servlet.ServletException;
 9import javax.servlet.ServletRequest;
10import javax.servlet.ServletResponse;
11
12public class EncodingFilter implements Filter {
13    private String charset = null;
14    public void destroy() {
15
16    }

17
18    public void doFilter(ServletRequest request, ServletResponse response,
19            FilterChain chain) throws IOException, ServletException {
20        request.setCharacterEncoding(this.charset);
21        chain.doFilter(request, response);
22
23    }

24
25    public void init(FilterConfig arg0) throws ServletException {
26        this.charset = arg0.getInitParameter("charset");
27    }

28
29}

30

在web.xml中注册这个Filter,注意他的位置必须放在需要调用action及jsp或其他页面声明之前
 1<filter>
 2        <filter-name>encoding</filter-name>
 3        <filter-class>cn.zhang.myznt.filter.EncodingFilter</filter-class>
 4        <init-param>
 5            <param-name>charset</param-name>
 6            <param-value>UTF-8</param-value>
 7        </init-param>
 8    </filter>
 9    <filter-mapping>
10        <filter-name>encoding</filter-name>
11        <url-pattern>/*</url-pattern>
12    </filter-mapping>

同时在连接mysql数据库的时候也要改为jdbc:mysql://localhost:3306/mldn?useUnicode=true&amp;characterEncoding=utf-8 如果连接在java代码中使用,请使用&,如果是在xml中使用请写成&amp;

    关于mysql的collation字符集和mysql的characterSet字符集问题,查了很多资料都说要设置成一样,我想那只是针对如果你选GBK作为数据库编码的时候所用,但如果选用UTF8作为数据库编码的时候就不一定正确了。
    今天根据网上的资料将所有的characterSet设置成utf8(可用mysql> SHOW VARIABLES LIKE 'character_set_%';查看),一直在测试乱码问题解决没有。在测试过程发现传递的中文都是正确的,可就是在MySQL Client中查看的是乱码,所以继续找方法解决,但其实这个时候你插进去的中文已经是正常的了,只是在MySQL Client中显示是乱码。那么为什么会这样?MySQL Client设置成UTF8的时候中文不能正常显示,此时我们应该将charact_set_client :设置成gbk,这样就可以正常显示中文了。
    可以在my.ini中

[mysql]

default-character-set=gbk


而下面的default-character-set=utf8,两个default-character-set的设置是不一样的。当然如果你选用gbk作为数据库编码,是需要设置成一样的。
posted on 2009-07-23 17:40 平涛 阅读(513) 评论(0)  编辑  收藏 所属分类: 学习问题

只有注册用户登录后才能发表评论。


网站导航: