我尝试了一下按位操作。把utf-8编码的汉子的三个字节进行转换,
第一个字节除去高四位 1110
第二个字节除去高两位 10
第三个字节除去高两位 10
把剩下的位顺序排成两个字节。然后 调用 String s = new String(bytes, "GBK");
显示的还是乱码。

解决方案 »

  1.   

    String s = new String(字符串.getBytes("UTF-8"),"GBK");
      

  2.   

    String s = new String(字符串.getBytes("iso-8859-1"),"GBK");
      

  3.   


    String a="涓浗";
    String a2 = new String(a.getBytes("GBK"),"UTF-8");
    System.out.println(a2);
      

  4.   

    String s = new String(bytes, "GBK");谁说的 new String 可以在不同编码之间进行转换?
      

  5.   


    行个屁!没看见老大都发话了:谁说的 new String 可以在不同编码之间进行转换?
      

  6.   

    有没有介绍下方法的,看了个gbk转utf-8的源码。怎么我给逆过来却不能把utf-8转成gbk呢?
      

  7.   


    String s="编码转换的字符";
    s= new String(s.getBytes("utf-8"),"gbk");
    这样绝对没错误的!
      

  8.   

    楼主,先要跟你解释下一个概念,String s = "字符串"; 这里的s它是一个字符串,它的编码是和操作系统本身有关的如果你的操作系统是windows操作系统,默认就是gbk编码如果你的操作系统是Ubuntu,默认就是utf-8编码然后byte[] bytes = s.getBytes();这句话是用来获得默认编码的,此时bytes的内容可以说和内存中字符串s的内容完全一样String s = new String(bytes, "GBK");这句话就是把bytes用GBK编码方式进行解释另外控制台显示乱码,不代表字符串转化不成功因为控制台最终的显示是按照操作系统的默认编码进行显示的也就是说如果你的操作系统默认编码是utf-8,而你将其转化成gbk打印出来,是乱码也是正常的所以还是要看bytes的内容,如果bytes对的话,那就行了,不用管什么乱码了
      

  9.   


    回复一楼,这个方法我试过好多次了,不行啊。 本来人家是UTF-8,是支持中文的,干嘛还要转成GBK呀多此一举,
      

  10.   

    这样是转不了的,如果说这样可以转,那对编码还是不熟悉的。有兴趣的话,可以看看我在下面这个帖子 11 楼中的回复:http://topic.csdn.net/u/20080623/16/e0f44f00-eaf9-4d38-b325-a3cc443f2ec9.html
      

  11.   

    谢谢大家的帮忙,我查了好几天的资料。终于搞明白我程序的问题了。
    java中的内码都是unicode。不管编辑器采用什么编码方式,String类型在jvm中都是unicode。用编辑器写的 java文件(不管什么编码方式),经过编译成class文件后,class文件也是unicode编码。(亲自试验了好多次),
    因此我问的那个问题其实是没意义的。只有在需要进行I/O时才有可能要转码。比如客户端发来个utf-8编码的流,服务器错误的以为是gbk流,这样就会出现问题。
    我的程序 使用了 jni。因此windows系统返回给我一个gbk的流,java虚拟机以为是utf-8的流,所以出现了问题。
    另外补充一下,String.getBytes("gbk");这个方法是编码。把unicode的字符串编码成gbk的字节数组。
    new String(bytes, "gbk"),这个方法是解码,把gbk编码的字节数组解码成unicode的字符串。
    经过这几天的研究,目前我对java编码的问题了解的比较深了。大家有什么问题可以留言给我。
    结贴了。