我一直对java字符集方面比较模糊,请求帮助。首先请大家看看我对字符集的理解,如果有错误,请指出,谢谢1)一般在用eclipse或者myeclipse写java类的时候,有个字符集的选择,比如此时选择utf-8字符集,是不是可以说,在编译成class文件的时候,按照utf-8字符集方式编译成unicode哦?2)但是,现在这个java类(字符集为utf-8)所操作访问的数据库表中的字符集为gbk,如果,现在通过这个java类查询出的数据有中文,这些中文正好赋给了java变量,比如 s="我们是中国人",那么这个变量的汉字会不会是乱码哦?(因为数据表的字符集和java类的字符集不一样呀)。此时的s变量到底是属于utf-8字符集,还是gbk字符集哦?3)此时要是对这些汉字进行正确转码,是不是可以这样理解:先把这些中文按照gbk转变成unicode哦? 然后,再转换成utf-8字符集形式后,才能正确显示汉字哦?4)我们经常再客户端通过jsp请求访问服务端,如果请求参数有汉字,这些汉字是不是以iso8859-1编码形式传到服务端?
如果,服务端是采用utf-8形式的,是不是要 把这些参数进行转换哦?5)我们经常看到iso8859-1和gbk进行转换,或者iso8859-1和utf-8进行转换,有没有gbk和utf-8之间的转换哦?如果要通过
gbk向utf-8的转换,代码可以这样写吗?new String( str.getBytes( "gbk" ), "utf8" ) 
如果,不是,该怎样哦?

解决方案 »

  1.   

    不是的,这里的字符集是源文件(.java文件)存储时使用的字符集。
    .class文件中字符集一定是UTF-16
      

  2.   

    看来前面1)有问题了,后面偏差就大了。数据库中数据只要是用数据库中正确的字符集读出,到java程序中就不会是乱码。
    字符集不一样可以自动转换,问题是你不能声明错数据库连接中用的字符集。后面不答了,你再重新琢磨。
      

  3.   

    问题1:Java 编译器是用 Java 开发的,不管使用什么编码 Java 编译器都会将其处理成为 Unicode。
    问题2:这个不但在 Java 客户端需要设置编码,而且在数据库服务端也需要设置编码,至少得让其能支持中文字符。
    问题3:不明白要问什么
    问题4:URL 的规范中本身就是不允许带有汉字的,要带有汉字需要根据编码进行相应 URL 编码转换,否则很容易出现乱码,如果不出现乱码都是浏览器考虑周到,但不能保证每种浏览器都是这样。
    问题5:这样的转换会现问题,下面这个帖子中会告诉你这样的转换内部是怎么做的:
    http://topic.csdn.net/u/20080623/16/e0f44f00-eaf9-4d38-b325-a3cc443f2ec9.htmlPS:原来回过一个帖子,是关于如何识别乱码,如何解决的,但是基本上也没人看,有兴趣的话,可以看看:
    http://topic.csdn.net/u/20100909/18/f59a582e-668e-47b6-ad4f-21b6ab3b50a5.html
      

  4.   

    2)但是,现在这个java类(字符集为utf-8)所操作访问的数据库表中的字符集为gbk,如果,现在通过这个java类查询出的数据有中文,这些中文正好赋给了java变量,比如 s="我们是中国人",那么这个变量的汉字会不会是乱码哦?(因为数据表的字符集和java类的字符集不一样呀)。此时的s变量到底是属于utf-8字符集,还是gbk字符集哦?谁帮我看看这个问题哦???
      

  5.   

    唉,我还是再来回答一遍吧。s变量是Unicode字符集。精确地说,是UCS2(即UTF-16所能表示出来的Unicode字符集)。Java中字符变量都是Unicode字符集。
    这个变量会不会不是乱码,很复杂:
    首先,数据库的字符编码选项是否正确配置,数据库中的每条数据的二进制编码是否正确。(要考虑进数据库时是否就已经是乱码了)。
    在连接上是否正确使用了和数据库一致的字符编码选项配置。这个问题之所以很复杂,是因为有时我们配置错误,但是多次转换偶合导致没有乱码,但这种方式有可能广为流传。比方说在数据库侧使用不能合法支持中文存储的ISO-8859-1字符集,不一定会出现中文乱码。