还没有总结完成.
欢迎一起探讨,全文见:
http://upurban.com/bbs/viewtopic.php?p=426#426write by wei 2006-12-17 环境: tomcat5.0.27+jdk1.4.2_05+eclipse3.2.1+mysql4.1.14 
参考文档: 
1.http://china.eceel.com/article/study_for_character_encoding_java.htm 
2.http://www.chinaunix.net/jh/26/15968.html 
3.http://www.javaeye.com/t/14980.html(这篇文章不错) 典型的java程序有哪些地方可能涉及到encoding的问题? 
1.数据库的编码.mysql默认采用iso-8859-1(latin1) 
2.jdbc连接数据库. 
jdbc:mysql://localhost:3306/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf8&mysqlEncoding=utf8 
3.java程序中对字符串的编码. 
4.jsp中的编码. 
4.1.<%@page pageEncoding="UTF8"%> 
4.2.<meta http-equiv="Content-Type" content="text/html; charset=utf8"> 
4.3.request.setCharacterEncoding("UTF8"); 
4.4.response.setCharacterEncoding("UTF8"); 
5.tomcat 中connector URIEncoding

解决方案 »

  1.   

    还有经典的接收数据的转码
    String input = new String(request.getParameter().getByte("ISO8859-1"));
      

  2.   

    打错
    String input = new String(request.getParameter().getByte("ISO8859-1"),"gb2312");
      

  3.   

    友情re还是写一个 filter好 
      

  4.   

    写filter是后面要做的.由浅入深,一步步来吧.我想把解决乱码问题的多种方式都总结一下.因为有时候,在复杂的环境下,有其他的制约因素让你不能选用最彻底的或者最漂亮的方案.
    昨天晚上又做了更新,请见:http://upurban.com/bbs/viewtopic.php?t=246
    对于高手来说,这是小儿科,或许对大多数初学者,这个会给他们节省不少摸索的时间.
      

  5.   

    re cobola:
    至于Filter,可能不用自己去写,apache的那个拿过来就可以用.不过,自己写好象也很简单.
    只是必须要知道什么时候有效.如果没有把编码的方方面面考虑到.单一的filter也有可能产生乱码.其最关键的还是要client,jsp,database配合起来处理.前后一致.
    谢谢上面的支持.
      

  6.   

    深藍的bolg上也总结了4个方法,找到了发给大家
      

  7.   

    1.编码问题:
      (1)首先确定JSP页面头部是否有:<%@ page contentType="text/html; charset=GBK" %>
      (2)类似这样的转码:
         String param= new String(request.getParameter("param").getBytes("ISO-8859-1"), "GBK");
      (3)添加filter字符过滤器,具体做法:      先添加类:import javax.servlet.Filter;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.FilterChain;
    import java.io.IOException;
    import org.apache.log4j.Logger;
    import java.net.URLEncoder;/** *//**
     * 请求中中文字符串过滤类
     */public class SetEncodingFilter
        implements Filter ...{
      private Logger logger=Logger.getLogger(this.getClass());  public void init(FilterConfig filterConfig) throws ServletException ...{
      }  public void doFilter(ServletRequest request, ServletResponse response,
                           FilterChain chain) throws IOException, ServletException ...{
        logger.info("请求转码过滤器===================");
        request.setCharacterEncoding("gb2312");
        chain.doFilter(request,response);
      }  public void destroy() ...{
      }
    }
         再注册类到XML里:  <filter>
        <filter-name>Set Encoding</filter-name>
        <filter-class>SetEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>Set Encoding</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
       (4)如果是通过"a.jsp?param=中文"传递参数,则需要:
         a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
           取值用java.net.URLDncoder.dncode(param);再转回中文
         b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:       <Connector 
    port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   debug="0" connectionTimeout="20000" 
                   disableUploadTimeout="true" <!--在里边加上这个参数-->URIEncoding="gb2312"
     /> 
       (5)数据库乱码,首先确定你在插入数据库之前是中文,解决办法:     在数据库的数据库连接URL中加上useUnicode=true&characterEncoding=GBK就OK了。      如果在读取的时候出现乱码用第二种方法解决.http://blog.csdn.net/lip009/archive/2006/09/07/1192022.aspx#521755
    -----------------------------------------------------------------
    声明:lip009(深蓝忧郁)blog上学习来的。
      

  8.   

    凡是把代码写成 new String(request.getParameter("param").getBytes("ISO-8859-1"), "GBK");
    肯定是有更好解决办法的
      

  9.   

    谢谢jicken_woo
    通常用UTF-8可能比较好.
    UTF-8最好不要写成UTF8.
    这个filter应该可以抄来用.
    apache上的和这个也几乎一样.
      

  10.   

    http://www.newbooks.com.cn/info/52829.html
    昨天有人提供的连接,一共有3篇文章,对大家应该有帮助.
      

  11.   

    jicken_woo,这些理论性的文章很有用.thanks.
    我的实验也做完了,给出了三种完整的解决方法,代码可以直接拿去用.
    详见:
    http://upurban.com/bbs/viewtopic.php?p=436#436
    估计还会有些问题,欢迎讨论.
      

  12.   

    有个Servlet过滤器不是挺好用的吗?
      

  13.   

    其实那个过滤器也就一行话:
    request.setCharacterEncoding("UTF-8")
      

  14.   

    但是用不用设置request为UTF-8却是要依据情况而论.并且,过滤器对form的get方法不起作用,需要在tomcat中设置URIEncoding.
      

  15.   

    常见的问题,都应在配置中解决,在我们自己的Java程序里,都应该直接使用String,而绝不应该是new String("", encoding)的方式
      

  16.   

    楼上的,问题在于有很多情形不是你能决定的.
    比如多个系统整合的时候.有时候在一个数据库中,要有两种不同编码的table,怎么办呢?
    理想是一回事,现实是另一回事.只有具体问题具体分析才行.否则,也用不着你我这些程序员了.
      

  17.   

    为什么会在一个数据库中,要有两种不同编码的table??!!
      

  18.   

    比如你集成James邮件服务器的时候,如果你用完整的utf8方案,是不是要修改james代码?
    还有很多实际的系统集成应用,是多个厂商的合作.
    实际应用中并不是用一个UTF8走遍天下都不怕的.
    否则,为什么mysql默认安装不直接只支持utf8呢?
      

  19.   

    支持shine333(enihs),但是原理我们还是应该懂的
      

  20.   

    我曾经在这个方面费了很多周折,我总结如下:
    URL上传递中文怎么转都不行,因为与tomcat版本有关.其他的转化就可以了.
      

  21.   

    fionazou,你说得对,有时候版本问题也是很麻烦.
    get和post是不一样的.
    当用get方式时,应该设置tomcat的<connector... URIEncoding="UTF-8">(或者你希望的encoding).这样,在jsp里得到的就是UTF-8编码.
    当用post方式时,应该设置request.setCharacterEncoding("UTF-8").这样,jsp里得到的也是UTF-8编码.
    不过,mysql的编码也非常复杂.有时候会对结果造成"莫名其妙"的影响.欢迎一起来总结.
      

  22.   

    不是吧,到处是乱码?
    可能是数据库的编码问题.要搭配起来用.你把具体的环境报上来,看看是哪个地方不对.
    我在windows和linux上都试过了.很正常的说.
      

  23.   

    tomcat与apache整合时,中文乱码的问题. 对于form用get方法提交数据的,一般应该在tomcat的server.xml中设置connector为URIEncoding="UTF-8" <Connector 
    port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                   enableLookups="false" redirectPort="8443" acceptCount="100" 
                   debug="0" connectionTiueout="20000" 
                   disableUploadTimeout=utrue" 
                   URIEncoding="UTF-8"/> 但是,对与apache整合的tomcat来说,应该设置提供给apache访问的connector,如下: 
     <Connector port="8009" 
                   enableLookups="false" redirectPort="8443" debug="0" 
                   protocol="AJP/1.3" URIEnUoding="UTF-8"/> 
      

  24.   

    Apache Tomcat 5.5总是乱码。