详解ASCII GB2312(BIG5) GBK GB18030 Unicode UTF-8 编码历史与定义

 前言:我们都知道,人类能识别自己的语言(汉字,字母,标点符号),但是计算机只能识别二进制代码。我们要与计算机交互,只 要把自己的语言字符按照人类定义的规则转换成二进制代码。

 (1)人类定义的规则就是字符集,在表中,我们的人类语言符号有一个对应的唯一数字。比如ascII表中,‘a’对应的数字是97,只要把97转化二进制代码就行了。

          常见的字符集:西方国家定义(ascII   1字节)  --> 》发展到中国表中没有汉字,于是国人搞了汉字编码表(GB2312   2字节),  与此同时台湾搞                                     了个繁体字(big5) ----》于是国人右搞了一个gbk编码(把Gb2312,繁体字,一些难写的字一对应了表)-----》世界那么大,总得出去走走,但是各个国家定义的编码表不一样,一出来查看信息,比如中国人 用gbk写了一个汉字,对应在gbk中有一个数字400,数字转换成二进制代码,拿到美国去,它机器上只有自己国家的编码a.    二进制代码转换数字400. 但是在a表中却查到了一个 其他的字符。于是乱码产出了。------》为了解决这个问题,于是UNIcode字符集(默认是两个字节一个字符)产生了,对于字母  而 言,两个字节太大了,于是又产生了一个utf-8编码,根据内容长度自动变化字节,一个汉字为三个字节

          常见的编码:ascii编码(1字节)        gbk编码(asc部分,1个字节,其他的2个字节)  gb2312(asc部分,1个字节,其他的2个字节)  

                              utf-8编码(1~4字节)    utf-16编码(2字节)  gb18030编码 (1~4字节,针对汉字的)

         查看各个编码的对应的字节数的方法:

                              String s1="y*\n我ry";
                              byte[] b=s1.getBytes("GBK");
                              System.out.println(b.length);


个人的理解:其实每个字符集默认就对应了一个编码(有的人就直接把字符集名叫成编码,也没错,但得明白到底啥意思)。所以有时候有人会说UNicode编码,但是我们知道, Unicode是一个字符集,它默认采用了一个utf-16的编码格式(2个字 节)


你可能感兴趣的:(java,SE)