编码格式
编码
获得编码下的byte值
String str4 = "中";
System.out.println(Arrays.toString(str4.getBytes("编码格式")));
1. GBK
● 包含了基本上所有的中国字,前127位是ASCII编码,再127是 西欧字符,然后是中国字、
● 汉字是由大于128两个字节组成的,如“中”字,从-128到127可以看成一个循环,128相当于-128,214就是-42,208就是-28.
● 测试编码
byte[] bs = {(byte)214,(byte)208};
String str = new String(bs);
System.out.println(str);
byte[] bs3 = {-42,-48};
String str3 = new String(bs3);
System.out.println(str3);
2.GBK2312
● 等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。于是国人就自主研发,把那些127号之后的奇异符号们直接取消掉。规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。
3.UNICODE
● 因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码。当时的中国人想让电脑显示汉字,就必须装上一个”汉字系统”,专门用来处理汉字的显示、输入的问题,装错了字符系统,显示就会乱了套。这怎么办?就在这时,一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “UNICODE”。
4.UTF-8
● UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位和 16个位。
● 于是就会有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比 较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。但是目前的电脑来看,硬盘都是白菜价,电脑性能 也已经足够无视这点性能的消耗了。所以推荐所有的网页使用统一编码:UTF-8。
● 测试编码
byte[] bs2 = {(byte)228,(byte)184,(byte)173};
String str2 = new String(bs2,"utf-8");
System.out.println(str2);
5.UTF-16
● 测试编码
int a = 0x4E;
int b = 0x2D;
byte[] bs1 = {(byte)a,(byte)b};
String str1 = new String(bs1,"utf-16");
System.out.println(str1);
6.UTF-16转换成UTF-8规则
如:汉字“中”
UTF-16二进制编码为:
11111110 11111111 01001110 00101101
UTF-8二进制编码为:
11100100 10111000 10101101
转换如下图: