Filter中文过滤器有问题,诸位大侠帮我看看啊!

来源:百度知道 编辑:UC知道 时间:2024/06/19 23:00:43
这个问题困扰我两天了,就是不成功,输入中文写入数据库始终是乱码。我这个贴子可能说的有点罗嗦,请大家耐心看完,谢谢了先!

首先说明我使用的是MySQL5.0数据库,库和表的编码都设置成了gb2312,就是做一个简单的插入数据库的例子,JSP网页上有一个表单,一个文本框、一个提交按钮,在文本框中输入中文,点“提交”后就插入到了MySQL数据库中,下面这段代码是我写的过滤器:
public class EncodingFilter implements Filter{
FilterConfig fc;
private String targetEncoding="gb2312";
public void init(FilterConfig fc) throws ServletException{
this.fc=fc;
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
HttpServletRequest hreq=(HttpServletRequest)request;
hreq.setCharacterEncoding(targetEncoding);
chain.doFilter(request,response);
}
public void destroy(){
this.fc=null;
}
}
我配置好web.xml文件后运行测试,我将连接数据库的代码和插入数据的代码写在了JavaBean里,运行时能成功插入数据,可打开MySQL中的表,中文却是“???”,我也曾在网上问过,一个人一种说法,有人让我在chain.doFilter(request,response);前加一句输出语句:System.out.println("test");看看有没有经过这

补充2:有两种方式可以把utf8设置到字段级别。
1.工具方式,请使用mysql官方工具mysql query browser,然后在表的edit table中的column details,直接对字段进行设置。
2.命令行方式,ALTER TABLE tablename MODIFY COLUMN columnname varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL;对于每个可能会出现乱码的字段都要设置。

------------
补充:
他对已有的数据无效,只对设置utf8后的数据有效。另外,请楼主注意:utf8要设置到字段级别,而不仅仅是表级别。

------------------------------------
不需要这样处理。对于jsp+mysql的多语言问题,可以用以下解决方案,可以对任意语言都适用。
1.在数据库链接字符串上要形如:jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8(注意要加characterEncoding=UTF-8)
2.在数据库表和相应的字段要的charset要选择utf8(字段也要加)
3.在servlet的java中去参数时要加上:httpServletRequest.setCharacterEncoding("UTF-8");
4.jsp页面要加上字符集:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
这样就可以处理所有语言的乱码问题。

你把mysql里的内容再用java读出来,看看是什么内容?

那可能是你的数据库显示的问题,在mysql里看上去是乱码,但是你取出来可能就不是乱码