日期:2014-05-20  浏览次数:20580 次

问个gbk 与utf-8的问题
一直对java中有关字符集的问题,有些头疼,今天,想问下各位高手。首先大家看下我对他们的理解,是不是对的。

gbk字符集,我的理解是这样的,把所有的汉字和汉字下的符号用一种编码对应起来。以便电脑使用。

utf-8字符集,我的理解是这样的,他把全世界的字符用一种编码对应起来。以便电脑使用。也就是说,utf-8的范围超过gbk了。


我现在有一个疑问,如果针对同一个汉字,随便什么中文字符,其对应的gbk编码和utf-8编码是不是完全一样哦?



第二个疑问
java 运行的其实是编译后的class文件,而不是源代码。如果,我的项目工程的字符集是utf-8的,因此,这些java类被编译的时候,应该是以utf-8的字符集形式编译成java内码的。也就是class文件,不知道我这样的理解对不对?



如果现在有个java变量如 String userName="王小三"; 该类被运行的时候,其实是运行其对应的class文件,该文件是被java内码编译的,因此,在运行的时候,其实是把java内码按照utf-8的形式解码的过程,所以,其汉字是没有乱码的,如果,他要是按照gbk的形式解码,我想,应该是乱码吧。我这样理解对不对哦?



如果,我的工程是gbk字符集的,我现在有个java变量 其内容不但包括了中文,而且还包括了只有utf-8编码才对应的字符,那么在运行这个java类的时候,因为这个工程是gbk的,所以,在解码的过程,应该不能正确解析只有utf-8编码才对应的编码吧。


------解决方案--------------------
1、不一样
2、编译成2进制码,不过JAVA用的是UNICODE

不对
不对

首先建议LZ去看看UNICODE和UTF-8关系,然后了解一下ANSI编码,再看看ASCII
------解决方案--------------------
1.GBK和UTF-8是两种不同的字符集编码,所以他们对应的中文字符的编码是不一样的。但是英文字母的编码是一致的。
2.java在编译成class文件的时候是根据文件的编码格式来解码的,而跟整个工程的编码没有什么关系。
------解决方案--------------------
2-2
不对么?
如果一个项目写的时候用的编译环境是utf8,然后导入到另一个用gbk的环境下中文字符不会乱码么?
------解决方案--------------------
utf-8外国用得比较多 gbk中国用得比较多!但是两种编码格式可以通过UNICODE进行相互转换,UTF-8对应的一个中文是三个字节表示(结束符是一个字节),gbk对所有中文字符都是2个字节,如果你一项目编译环境是UTF-8,那么你必须在系统环境变量里面设置下字符集,不然可能要出现乱码