啊? 兄弟,有没有搞清楚转码的含义呢? 例如页面显示的是用GBK编码,mysql中用的却是unicode哟,如果没通过转码,那么显示的结果当然不正确咯,需要提供程序给你转码么? 现在的情况你应该是要把unicode转为GBK吧,用以下程序段吧  public static String unicodeToGb2312(String s)
  {
    try
{
       return new String(s.getBytes("ISO8859_1"),"gb2312"); 
    } 
    catch(UnsupportedEncodingException uee)
{
       return s;
    } 
  }

解决方案 »

  1.   

    哈哈,不好意思,兄弟!
    上面那个是我在c++版的账号,一时没留神在这作了回答了,这个才是我在java版的账号,要是给分的话,请给到这个吧  :)啊? 兄弟,有没有搞清楚转码的含义呢? 例如页面显示的是用GBK编码,mysql中用的却是unicode哟,如果没通过转码,那么显示的结果当然不正确咯,需要提供程序给你转码么? 现在的情况你应该是要把unicode转为GBK吧,用以下程序段吧  public static String unicodeToGb2312(String s)
      {
        try
    {
           return new String(s.getBytes("ISO8859_1"),"gb2312"); 
        } 
        catch(UnsupportedEncodingException uee)
    {
           return s;
        } 
      }
      

  2.   

    好像这是java servlet的一个bug,找一找源代码,修改一下
    免得总要在自己的程序里改来改去
      

  3.   

    我说清楚一点:数据库中的字符是:这是——一个测试字符串
    我用其它软件察看数据库,字符能正常显示,但是用rs.getString("XXX")时,"这是"后面的两个字符就显示不出来----"??". 但是,我仅仅打印这个字符串时,又能够正确显示我怀疑是tomcat 或者 mysql 字符集不够大的原因。
      

  4.   

    jacob1(林叶)  public static String unicodeToGb2312(String s)
      {
        try
        {
           return new String(s.getBytes("ISO8859_1"),"gb2312"); 
        } 
        catch(UnsupportedEncodingException uee)
        {
           return s;
        } 
      }
      

  5.   

    倒~~``兄弟,难道你就没试试我的方法吗,怎么会是字符集不够大呢,unicode的编码UTF-8能容纳6万多个字,UTF-16就更不用说了
      

  6.   

    试过了,最先试的就是这种方法,但不幸的事,要么显示出“这是??一个测试字符串”,要么就根本不对。
    还有,你给的例子不是unicode, 而是iso-8859-1,西方字符集.
      

  7.   

    我在w2k上用sql2k来做servlet1、从表单用get/post提交的数据,直接写入数据库,无乱码2、从表单取得数据,然后存入一个变量,或放入session中,然后在另一个servlet中取出,写入,出现乱码。在写库时使用new String(a.getBytes(),"ISO-8859-1")后无乱码3、将写入数据库的操作做为类的一个方法。在取得表单get/post数据后,调用这个方法写入,此时出乱码。在写库时使用new String(a.getBytes(),"ISO-8859-1")后无乱码
    sql2k写数据时应写入iso-8859-1的编码字符(大多数据库似乎都如此),因此,从表单取得数据直接写入,由于此时字符是iso-8859-1的编码,所以不会出现乱码在将从表单中取得的数据存入变量、session,或是调用方法时传参(java不象c有传值的说法),此时字符串已经被改为unicode编码,因此写库时要转码。
      

  8.   

    sorry,没看清题我上面说的是我在入库时所遇到的问题,而从数据库中取出数据时,我在resin下,写,response.setContentType="text/html;charset=GBK";就一切ok了
      

  9.   

    没错,你说得很正确,iso-8859-1便是即俗称的Latin-1,西欧字母集,但它和Unicode的头256个字符是完全相同的,而且iso-8859-1前半段也正是ASCII码,因为平时我们页面上的英文和数字不需要转码就是这个原因,因为无论在那种编码方式中,他们都是相同的,但中文就惨了,需要在unicode的unihan区中转换为GBK这些亚洲编码,所以我们在通常的使用中经常遇到麻烦。你最好再检查一下你的程序,要是你mysql中的中文显示正常的话,页面就不需要转码,直接rs.getString(..)就行,要是mysql中的是以乱码存储的话,你可以在显示时用上unicodeToGb2312(rs.getString(..)),而且不要忘了这句哟:
    <%@ page contentType="text/html;charset=gb2312" %>要是还不行的话,就把源程贴上来吧
      

  10.   

    To jacob1(林叶) :正解,完全赞同,我也是如此解决的。To: rootwuyu(wuyu) 
    “在将从表单中取得的数据存入变量、session,或是调用方法时传参(java不象c有传值的说法),此时字符串已经被改为unicode编码“
    这是什么意思,我有些不懂了,我用session传过去的,存在oracle中没有问题呀。我觉得只是mysql对中文支持的问题吧。