您的位置:首页 > 编程语言 > Java开发

提高你的Java代码质量吧:强烈建议使用UTF编码

2013-08-06 09:30 190 查看
一、分析

Java的乱码问题由来已久,有点开发经验的开发人员肯定遇到过乱码问题,有时从Web上接受乱码,有时是从数据库中读取乱码,有时是从外部接口中接收到的乱码。

先解释一下Java中的编码规则。Java程序涉及的编码包括两个部分:

1.Java文件编码

如果我们使用记事本创建一个.java后缀的文件,则文件的编码格式就是操作系统默认的格式。如果是使用IDE工具创建的,如Eclipse,则依赖于IDE的设置,Eclipse默认是操作系统编码(Window一般为GBK)。

2.Class文件编码

通过javadoc命令生成的后缀名为.class的文件是UTF-8编码的UNICODE文件,这在任何操作系统上都是一样的,只要是class文件就会是UNICODE格式。

二、场景

如下代码:

public static void main(String[] args) throws Exception{ 
    String str = "汉字"; 
    //读取字节 
    byte[] b = str.getBytes("UTF-8"); 
    //重新生成一个新的字符串 
    System.out.println(new String(b)); 
}


getBytes方法会根据指定的字符集提取出字节数组(这里按照UNICODE格式来提取),然后又通过newString(byte[]
bytes)重新生成一个字符串:通过操作系统的字符编码指定的byte数组,构造一个新的字符串。

结果已经很清楚了:如果操作系统使用的UTF-8的编码的话,输出就正确;如果不是,则会是乱码。

我们在详细分解一下运行步骤:

步骤1:创建Client.java文件,默认编码GBK(如果是Eclipse,则可以在属性中看见)。

步骤2:编写代码。

步骤3:保存,并使用javac编译,生成.class文件,保存在硬盘上。此时.class文件使用的是UTF-8格式编码的UNICODE字符集。

步骤4:运行main方法,按照UTF-8提取"汉字"的字节数组。

步骤5:重组字符换,读取操作系统的编码格式(GBK),然后重新编码变量b的所有的字节。问题就出来这里!!!!

步骤7:输出乱码,程序运行结束。

解决办法:问题清楚了,解决办法如下:

1.明确指定编码即可

System.out.println(new
String(b,"UTF-8"));

2.修改操作系统的编码方式,或者IDE的默认编码方式。

三、建议

对于此类问题,做好的解决办法就是使用统一的编码格式,要么使用GBK,要么都使用UTF-8,各个组件、接口、逻辑层都使用UTF-8,拒绝独树一帜的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: