首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

全是UTF8,还是中文乱码有关问题.

2012-01-02 
全是UTF8,还是中文乱码问题...昨天试了一天,还是搞不定.症状:入库时,如果有中文在库里则显示为乱码从库里

全是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;


  else
   this.ignore=false;
 }

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 // TODO 自动生成方法存根
 if (ignore || (request.getCharacterEncoding() == null)) {
  String encoding = selectEncoding(request);
  if (encoding != null)
   request.setCharacterEncoding(encoding);
 }
 chain.doFilter(request, response);
}

public void destroy() {
 // TODO 自动生成方法存根
 this.encoding = null;
 this.filterConfig = null;
}

protected String selectEncoding(ServletRequest request) {
 return (this.encoding);
}
}

  然后再web.xml加上

<!-- Set Character Encoding-->
<filter>
 <filter-name>Set Character Encoding</filter-name>
 <filter-class>com.struts.common.SetCharacterEncodingFilter</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>/*</url-pattern>
 </filter-mapping>
<!-- Set Character Encoding-->

  使用过滤器的好处很多,特别是项目之中。而且在使用国际化时就更有用了,只要在页面指定 <%@ page language= "java " pageEncoding= "UTF-8 " %>,服务器就会根据本地Locale来显示正确的字符集。

  所以我特别推荐使用过滤器。

  方法三:修改tomcat的server.xml文件中URIEncoding。

<Connector debug= "0 " acceptCount= "100 " connectionTimeout= "20000 " disableUploadTimeout= "true "
port= "80 " redirectPort= "8443 " enableLookups= "false " minSpareThreads= "25 " maxSpareThreads= "75 "
maxThreads= "150 " maxPostSize= "0 " URIEncoding= "GBK " >
</Connector>

  这个方法主要针对从url中获取字符串的问题。

  在tomcat5.0及以上版本,post和get方法在处理编码时有所不同。如果你在url中获取中文就会出现?号。但在tomcat4.1版本没有问题,因为tomcat4.1的post和get方法在处理编码时是一样的。


[解决办法]
server.xml 里面的
<Connector port= "8080 " protocol= "HTTP/1.1 "
maxThreads= "150 " connectionTimeout= "20000 "
redirectPort= "8443 "/>

加上 URIEncoding= "UTF-8 " 变成

<Connector port= "8000 " protocol= "HTTP/1.1 "
maxThreads= "150 " connectionTimeout= "20000 "
redirectPort= "8443 " URIEncoding= "UTF-8 "/>
[解决办法]
调用费时,移植性,代码可读性也不好.而且麻烦.
============================
哈哈,这样啊,那我建议你不要用数据库了,用数据库也有以上问题,干脆咱们都用HTML静态的好了,这样就根本不用调用,移值性好的不得了,代码比什么都可读,而且简单一点都不麻烦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
哈哈,开个玩笑,不过你说这个费时和调用数据库什么的比是不是就微不足道了,移植性怎么会差呢,就是换服务器换数据库换操作系统只要改方法就行了,其它调用的地方要改吗?代码可读性不好?不会吧,那么就是说调用方法越多的程序可读性就越不好了???还有麻烦,在你为解决这个问题到处找服务器编码设置问题而焦头烂额时我用这个方法早就解决了,你说是哪个麻烦一点?
个人意见,仅供参考!
[解决办法]

给点我之前遇到的一个郁闷的乱码问题~
也是捣鼓了好久~

spring + hibernate + Oracle9i 数据库乱码(JSP也肯定乱码咯)
问题出在,update的时候,save没问题,页面值跟到最后的getHibernateTemplate().update();方法都是正确的,一提交,数据库里面就是乱码了。
中英文半角全角全乱码,且只出现在更新的时候。
1.数据库的编码设置 "UTF-8 ";
2.servlet已转码:
public static final String CHAR_ENCODE = "GB2312 ";
public static final String CONTENT_TYPE = "text/html; charset=GB2312 ";
3.jsp页面统一“GB2312”编码;
4.代码移植到同事机器上,依旧,排除IE、环境问题。
5.最后是,经常出现在对应的某一个字段的乱码,而其他的都ok,但也有几个字段都乱码的情况。

结果就是因为有DATE型的字段在作怪,虽然问题已解决,但仍弄不清到底是什么导致的乱码。

------解决方案--------------------


不一定能解决你的问题。但希望对你有帮助。。

热点排行