JAVA学习册|字符编码|GBK(二)

上一节我们点到GBK的转换,在知识点中,我们提到了十六进制,还有String的byte存储方式,今天我们来继续探究GBK相关的知识点

先说两句

任何一个知识点到底层之后,总是比较头疼的,但是我们要首先有一个清晰的思路和方向,如GBK , 在写这个系列文章之前,我也仅仅知识他是一种编码方式,我也和大家一样,这样边写边研究,从已知出发,大胆假设,小心求证明。

从已知出发,GBK是一种编码方式,两个字节的编码,一个码对应一个中文字符。顺着这个思路,我们找到了GBK.java 这个类,里面做了字符的映射关系,然后在里面,我们看到了 DoubleByte.java这个类,通过这个类名,我们可以猜测,这是做编码和解码的实现类。不仅仅是对GBK,而是对所有的双字节的编码都会有这些实现,我们只需要把映射关系传给这个DoubleByte就可以了

如下图所示:

通过b2c的映射,反过来初始化c2b的映射

编码和编码也都先初始化,然后再把映射关系传递DoubleByte来操作。

所以顺着这个思路,我们就可以点进去源码看看是怎么一回事了。

同样,顺着这个思路,其他的双字节编码应该也是这样的,这个就留给各位小伙伴来扩展啦

附加知识点

先上一波代码镇文章

String s = "术";
       byte[] gbks = s.getBytes("GBK");
       System.out.println(gbks.toString());
       System.out.println(Integer.toBinaryString(-54));
       System.out.println(Integer.toBinaryString(-11));
       System.out.println(Integer.parseInt("11001010",2));
       System.out.println(Integer.parseInt("11110101",2));
       System.out.println(Integer.toHexString(202));
       System.out.println(Integer.toHexString(245));
       System.out.println(Integer.parseInt("caf5", 16));

Integer.toHexString 是把一个十进制数用16进制表示

Integer.parseInt 是把一个二进制数转成10进制

Integer.toBinaryString  这里是把一个整数按补码的形式输出

我知道很多小伙伴看推文时很少拿代码去运行,只看博主的解释,这样很容易被带到坑里面去的,所以,这里,包括以后小刀的文章,会尽量把思路写下来,但运行和找结论还是要交给各位小伙伴了。

然后  这个字的GBK编码就是51957 .

我知道很多小伙伴看推文时很少拿代码去运行,只看博主的解释,这样很容易被带到坑里面去的,所以,这里,包括以后小刀的文章,会尽量把思路写下来,但运行和找结论还是要交给各位小伙伴了。

Integer.toBinaryString  这里是把一个整数按补码的形式输出

Integer.parseInt 是把一个二进制数转成10进制

Integer.toHexString 是把一个十进制数用16进制表示

小伙伴们可以顺着这个思路,一步步的往下梳理这个关系,有什么新发现,欢迎在下面留言给小刀哦

-----------

插播一条:

主题讨论第三期来啦,本期主题讨论的主题是,IO,本期的不同之处就是,发言会存档,和个人微信号绑定,后续可以生成自己的知识网络图!来吧,各位小伙伴们!详情请点击下面的阅读原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值