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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值