JAVA中 的.getByte问题

JAVA语言中对字符串取 .getByte 的时候,如果未指定编码格式,则默认集成当前 .java 文件的编码格式。

即:

当前的 .java 文件是 UTF-8编码,那么 .getByte即 .getByte("UTF-8")

当前的 .java 文件是 GBK 编码,那么 .getByte即 .getByte("GBK")

 

那么,如果 .getByte 在已经生成的 .class 文件,编码格式是怎样的?

 

我们用GBK编码和UTF-8编码来验证这个问题,我们都知道,一个中文的字符,GBK编码是2byte,UTF-8编码是3Byte,然后做

一个简单的例子:

创建一个类文件,默认是UTF-8编码,然后将其达成jar包。

 

然后在另外的工程中调用接口,工程的编码格式是 UTF-8 :

 

可以发现输出“中国” 是6个字节,UTF-8编码。

将当前的 TetUTF8.java修改成 GBK编码(工程仍然是UTF-8编码),然后再测试。

可以看到输出的是4个字节,这个还是GBK编码,所以说,JAR包中的编码还是和当前调用此接口的.java文件一致。

 

那么如果,我们当前的项目是UTF-8编码,但是我们需要调用这个接口,让其内部的编码变成 GBK ,是否可以通过修改当前调用类的编码实现呢?

 

在当前的类中,再封装一个接口,然后我们在新建一个TestGBK.java

在TestUTF8.java中,新建一个函数  UTF8_To_GBK(String info )  调用testBase64,当然

TestUTF8.java  是 GBK 编码

TestGBK.java   是UTF-8编码,这个类模拟我们当前的项目是UTF-8编码。

 

 

下面是输出的结果:

可以看到,输出的结果,仍然都是UTF-8编码。

如果通过  new String("中国".getBytes("UTF-8"),"GBK")) ; 编码,得到的结果仍然不是我们想要的: D6D0B9FA ,而是另外一个9字节的值,这是因为 UTF-8 是3个字节表示一个字符,GBK是2字节表示一个字符,这是因为:

中国   ->   UTF-8   -> 6字节数据 -> GBK  -> 3个中文字符 -> UTF-8 -> 9字节数据  

 

结论:

当前的 .java 文件是 UTF-8编码,那么 .getByte即 .getByte("UTF-8")

当前的 .java 文件是 GBK 编码,那么 .getByte即 .getByte("GBK")

.class文件中的 .getByte 默认编码也是跟随最终调用的.java文件,和中间层的.java编码格式无关。

 

注: 本文测试环境为 Eclipse + JDK1.8

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值