中文的最大麻烦就是不同charset在实际的字节存储是不同的。而Windows的缺省为GBK,Linux的缺省为UTF-8。一个汉字的GBK中的存贮在2个字节,在UTF-8中存贮在3个字节,如果字符集不统一,就会出现显示乱码的现象,如果设计到数据库的存储,问题就更大。
一般而言,不同的程序相互交互,一般会使用更为通用的UTF-8的方式。如果使用Eclipse开发 ,在Windows下缺省为GBK,需要更改项目的charset,具体如下:选择项目-》点击右键-》Properties,选择所需的字符集。
这样,这个项目在eclipse的整个开发环境就为UTF-8,包括在console中的调测信息。但是如果我们进行javadoc生成参考,会提示charset作为。我们需要在javadoc的wizard中,设置相关的参数,如下图所示:
如果我们在命令行进行编译,可以通过javac -encoding utf-8 xxxx.java指定字符集,当然在Eclipse中,由于已经将整个项目设置为UTF-8,会自动按UTF-8进行编译。
我们的项目最终生成一个可运行的jar包,如果这个jar包在Windows环境下运行,可能会出现中文显示的问题,这是一个基于UTF-8的jar包,可以指定VM用UTF-8来解释。相关命令为:java -jar -Dclient.encoding.override=UTF-8 -Dfile.encoding=utf-8 Test.jar。
到目前为止,从开发到编译,再到运行都没有问题,但是如果我们在Windows的cmd窗口中执行,由于cmd窗口是GBK,也会出现显示问题。可以通过命令chcp 65001,设置cmd的字符集。查看属性,发现已经成功变更字符集。如果需要改回默认值,可用chcp 936进行恢复。