日期:2014-05-18  浏览次数:20672 次

全是UTF8,还是中文乱码问题...
昨天试了一天,还是搞不定.

症状:
入库时,如果有中文在库里则显示为乱码
从库里取出数据,如果有中文,用JB断点调试也显示为乱码

我用JB2006开发的.
源文件/HTML/JS/CSS文件/项目属性/数据库编码全为UTF8
过滤器里,所有请求和响应也全是UTF8
JDBC   URL:jdbc:mysql://localhost:3306/forum?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
(我用的连接池,在XML文件里存储配置信息,所以&换成了&,具体的不说了,大家知道为什么)
看一遍又一遍的JDBC文档和MySql文档,没得觉得哪里有错啊.可就是中文乱码.

断点调试从客户端Post来的数据时,是UTF8,且不乱码.
直接在EMS   for   mysql   manager的query里直接用sql录入带有中文的数据一切OK!
用程序入库时乱码,我是用EMS查看到的,EMS版本为最新的Lite版,因为没有Pro版的破解[哪位有发给我喔,多谢啦:)]
EMS的客户端编码为default,我看了,好象没有UTF8选,晕死....不知道是不是Lite版没有.但是数据库我肯定是UTF8!

------解决方案--------------------
把每个表也建成指定的utf8的,如果还不行就是你的客户端工具里面设置的不对,或者换个客户端工具,用navicat试试,里面可以设定字符集
------解决方案--------------------
很简单你把表删了重新建就行了,但是一定记得选utf8 开始没选utf8 以后改的似乎没用,你这个问题我遇到过.你改了表应该就好了.肯定的
------解决方案--------------------
JVM版本一样吗?一般window下的jvm的默认字符集是GBK,linux下是UTF8。
------解决方案--------------------
tomcat默认的是8859-1的编码。
另外,mysql本身指定的什么编码,你的jdbc指的是utf-8没有问题。默认情况下,mysql编码是lan-1
------解决方案--------------------
是latin-1,不是lan-1
------解决方案--------------------
tomcat 下server.xml里可以改字符集设置,找你的8080端口
------解决方案--------------------
入库时,如果有中文在库里则显示为乱码
从库里取出数据,如果有中文,用JB断点调试也显示为乱码
======================
不管入库还是取出都可以在程序上进行字符转化的,你把转化的方法写成方法,到时调用一下就行了
------解决方案--------------------
一碰乱码就先转换,转换不行再看环境。
------解决方案--------------------
把SQL字符串转成UTF8。或者用参数的形式就不会出现乱码
------解决方案--------------------
tomcat默认编码是ISO8859-1
PS:编码问题很常见啊
------解决方案--------------------
server.xml在$TOMCAT_HOME\conf\下面
------解决方案--------------------
这段时间经常看到有人问到web开发中怎么中文总是?号。原因其实很简单,因为大家大多用的是tomcat服务器,而tomcat服务器的默认编码为 iso-8859-1(西欧字符)。就是因为iso-8859-1(西欧字符)编码造成了我们经常看到?号。

  方法一:最简单也是用的最多的方法。

<%@ page language= "java " pageEncoding= "GBK " %>

  或者<%@ page contenttype= "text/html;charset=gbk ";>这里可以用gb2312或者gbk,只是gbk比gb2312支持跟多的字符。这个方法用于jsp页面中的中文显示。

  方法二:使用过滤器。

  过滤器使用主要针对表单提交,插入数据库的数据都是?号。这也是应为tomcat不按request所指定的编码进行编码,还是自作主张的采用默认编码方式iso-8859-1编码。

  编写一个SetCharacterEncodingFilter类。

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class SetCharacterEncodingFilter implements Filter {
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;

 public void init(FilterConfig filterConfig) throws ServletException {
  this.filterConfig=filterConfig;
  this.encoding=filterConfig.getInitParameter( "encoding ");
  String value=filterConfig.getInitParameter( "ignore ");
  if(value==null)
   this.ignore=true;
  else if(value.equalsIgnoreCase( "true "))
   this.ignore=true;