这样是正确的,你那样乱转码当然出问题。
System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));

解决方案 »

  1.   

    同意楼上的,不明白你为什么要多转一次 ).getBytes("GBK"),"
      

  2.   

    还没到环境中测试,我是要把中文转成utf-8,new String("十日一水,五日一石".getBytes("UTF-8"))这样转是个别字出现问号,绝大部分汉字转成utf-8是行的,在测试中碰到"-","老"这样的个别字出现问号,
    System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));这样转,在中文环境中打印出来的全成中文,不知道在西文环境中是不是也能正常显示成中文,要到环境中测试
      

  3.   

    System.out.println("yy:"+new String(new String("十日一水,五日一石".getBytes("UTF-8")).getBytes("GBK"),"UTF-8"));
    这一行是模拟出现的问题,做测试用的
      

  4.   

    System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));
    这样应该没问题!
      

  5.   

    System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));
    这样应该是错了
      

  6.   

    请教如何将GBK编码的汉字正确转换为UTF-8编码?楼主disremember(disremember)2005-06-07 12:08:15 在 Java / Web 开发 提问
    我用   String   utf8Str   =   new   String(gbkStr.getBytes("GBK"),"UTF-8")   转换后,有些汉字正常,但有些字是乱码,应该怎么转换呢?请高人指教   
        
      谢谢 
    问题点数:20、回复次数:6
    Top
     1 楼jybbh(阿炼)回复于 2005-06-07 12:13:06 得分 20试一下这个   
      String   utf8Str   =   new   String(gbkStr.getBytes("ISO-8859-1"),"UTF-8")     
      
    Top2 楼disremember(disremember)回复于 2005-06-07 20:15:07 得分 0 to楼上,   
        
      不行的,因为gbkStr已经是GBK编码的了,用的方法转更是乱码,   
      现在的问题关键是GBK转码UTF-8时,   转码有的汉字正常,但有的字是乱码,   
      例如“所”字,转码后就是乱的。
    Top3 楼liuquanyi(大狗)回复于 2005-06-07 20:22:42 得分 0 是个问题!
    Top4 楼disremember(disremember)回复于 2005-06-08 15:29:00 得分 0 MSN上没人搞的了吗/??
    Top5 楼disremember(disremember)回复于 2005-06-08 17:48:09 得分 0 来人那
    Top6 楼disremember(disremember)回复于 2005-06-09 16:44:21 得分 0 upupup
      

  7.   

    应为在GBK和utf-8中,表示一个汉字要的字节数是不同,gbk一般2个,utf-8一般3个。比如把1个汉字用utf-8获取的字节(得到3个字节),在用gbk转为String。
    得到结果必然出错,变为一个汉字一个问号(在转换时对不符合该格式的都会变问号),如果转换时出现问号,那么这个字节码就彻底丢失了,在转回去,2个正确的+1个问号转不回一个utf-8格式的汉字,就会变2问号
      

  8.   

    并且有时侯,从utf-8里的3个字节里取出的两个字节,在gbk里没这样的字(想变乱码都变不成),这样第一次就直接变?号了,在转一次问号更多。所有不要用这样的转码方法。除非中间的格式是一个字节的(如iso-8859-1)这样不会错
      

  9.   

    new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8")这样没解决问题,显示乱码,new String("十日一水,五日一石".getBytes("UTF-8"))部分汉字显示乱码,解决方法应该是怎样?
      

  10.   

    你知不知道自己当前的 编码类型,strKey=new String(strKey.getBytes("GBK"),   //当前编码类型
                         "UTF-8");       //要转换的类型看下自己工程设置的编码类型。实在不行的话,用死办法。罗列出来
    key=new String(strKey.getBytes("iso-8859-1"),"UTF-8");
      key=new String(strKey.getBytes("gb2312"),"UTF-8");
    key=new String(strKey.getBytes("GBK"),"UTF-8");看看哪个的值对
      

  11.   

    向西文系统socket服务端写用out.write(new String(str.getBytes("UTF-8"))或
    out.write(new String(str.getBytes("UTF-8"),"GBK"));部分汉字不能显示,绝大部分正常,怎么颠倒转反而好,用out.write(new String(str.getBytes("GBK"),"UTF-8(gb2312)(ISO-8859-1)"));反而全乱码,搞不懂
      

  12.   

    out.write(new String(str.getBytes("UTF-8"),"GB2312")); 个别汉字能正常显示
    out.write(new String(str.getBytes("UTF-8"),"ISO-8859-1"));全乱码out.write(new String(str.getBytes("GBK"),"UTF-8或gb2312或ISO-8859-1)"));全乱码
      

  13.   

    写到socket里面的怎么是String阿,应该是字节阿。
      

  14.   

    out.write(new String(str.getBytes("UTF-8"),"GB2312"));你用反了吧,第一个是原始类型的编码,第二个是转换后的编码
      

  15.   

    向服务端写数据用DataOutputStream类的writeUTF()方法,直接写字符串,不做任何转码,服务端能收到,也能全部显示中文!但跟我要求的服务端接收
    PrintWriter类的write()方法写,转码就有问题,是跟写服务端的方法有关,请熟悉socket的朋友指教
      

  16.   

    谢piaopiao11() 和各位,问题已经在另一个贴子解决,是因为我向socket服务端写消息的写法有问题,多谢piaopiao11()在另一个贴子里帮我解决了这个问题