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

一、分析 

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,拒绝独树一帜的情况。


新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值