下面一段代码,将字符串在GBK与UTF-8之间进行两次转换,第一次生成乱码(UTF-8的字节码用GBK解析),第二次反推这个过程,应该会生成正确的字符串.
但是有些中文字却变成了'???'一类的乱码.只是其中的一些...
public class UTF8SimpleTry {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = new String("可怜");
System.out.println(">>>>>"+str);
String str1 = new String(str.getBytes("UTF-8"),"GBK");
String str2 = new String(str1.getBytes("GBK"),"UTF-8");
System.out.println("====="+str2);
}
}
上面的代码会打印出:
>>>>>可怜
=====可???
但是如果str为"我我我我我"就不会有乱码...
我的问题是:这个乱码是如何产生的?
(请认真看完上面的描述再给答案,最好是能针对此问题,也不拒绝有意义的转贴...谢谢....)
本机语言环境:GBK
JAVA文件保存方式:GBK
3: fish0715008 - 秀才 三级
是的,用8859_1怎么都不会有乱码..
5: qingdaowpj - 助理 二级
我明白了,问题出在str1,str.getBytes("UTF-8")是没有问题的,得到了正确的字节码,但是把这些字节码以GBK的方式解析时,由于位数的差异,生成的乱码中,有些是不可逆(未知),所以逆向编码是生成了错误的字节码str1.getBytes("GBK"),故无法解析了...
[谢谢...做JAVA的对底层了解太少,不知你是否可以提供即时通讯联系方式]
6: simaxunhua - 秀才 二级
这里是对上传的附件解析后提供预览,所以和资源文件无关...