我尝试了一下按位操作。把utf-8编码的汉子的三个字节进行转换,
第一个字节除去高四位 1110
第二个字节除去高两位 10
第三个字节除去高两位 10
把剩下的位顺序排成两个字节。然后 调用 String s = new String(bytes, "GBK");
显示的还是乱码。
第一个字节除去高四位 1110
第二个字节除去高两位 10
第三个字节除去高两位 10
把剩下的位顺序排成两个字节。然后 调用 String s = new String(bytes, "GBK");
显示的还是乱码。
String a="涓浗";
String a2 = new String(a.getBytes("GBK"),"UTF-8");
System.out.println(a2);
行个屁!没看见老大都发话了:谁说的 new String 可以在不同编码之间进行转换?
String s="编码转换的字符";
s= new String(s.getBytes("utf-8"),"gbk");
这样绝对没错误的!
回复一楼,这个方法我试过好多次了,不行啊。 本来人家是UTF-8,是支持中文的,干嘛还要转成GBK呀多此一举,
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编码的问题了解的比较深了。大家有什么问题可以留言给我。
结贴了。