提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
前言
今天在转换文字时,发现编码是个感兴趣的东西,所以就自己总结了一下,ASCII码,GB2312,GBK,Unicode,UTF-8这些的基础知识,有不对的欢迎改正。
提示:以下是本篇文章正文内容,下面案例可供参考
一、ASCII
标准的ACSII码是用一个字节中的7个二进制位,最高位0或者作为校验位,可以表示2^7即0000 0000~0111 1111 共128个字符。
二、GB2312
1.编码范围
A1A1-F7FE 占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。
国标2312-1980, 用十六位表示一个字符也就是说一个中文汉字占两个字节, GB2312字符集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。
2.分区
01-09区为特殊符号。
16-55区为一级汉字共收录了3755个,按拼音排序。
56-87区为二级汉字共收录了3008,按部首/笔画排序。
10-15区及88-94区没有使用则未有编码。
3.目的
这样做的目的是同样以ASCII码的形式存储GB2312汉字字符,但是为了区别,所以在他的高位与低位都加上0XA0,这样高八位和低八位都大于128,用来区别ASCII码值。
三、GBK
GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案。
1.编码范围
8140-FEFE 占用的码位为: 23940 个码位剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
2.分区
汉字区
2312 汉字区:B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
扩充汉字区:8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
汉字“〇”安排在图形符号区:A996
图形符号区
2312 非汉字符号区:其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
扩充非汉字区:A840-A9A0。BIG-5 非汉字符号、结构符和“〇”排列在此区。计符号 166 个。
用户自定义区:
AAA1-AFFE,码位 564 个。
F8A1-FEFE,码位 658 个。
A140-A7A0,码位 672 个。
第三区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。
3.目的
GBK对高位仍然限制要大于128,但低位却没有限制。
四、Unicode
UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。共有65536个字符,但是并不能表示全球所有的文字
为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。可以表示进43亿个字符。
五、UTF-8
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。自己的理解为UTF-8是对Unicode编码表的二次编码,但非常实用。
1.UTF-8编码规则
对于ASCII码中的符号,使用单字节编码,其编码值与ASCII值相同。其中ASCII值的范围为0~0x7F,所有编码的二进制值中第一位为0(这个正好可以用来区分单字节编码和多字节编码)。用一个字节编码即可。
多字节编码需满足:第一个字节的前N位都为1,第N+1位为0,后面N-1 个字节的前两位都为10,这N个字节中其余位全部用来存储Unicode中的码位值。
总结
ASCII码是一个字节让最高位作为标志位,所以范围为:0x0-0x7F共计128个字符,而GB2312-1980则是将汉字等一些字符加入其中,他为了避免和ASCII码冲突,将在编码时,将区码和内码分别都加上了0XA0。GBK是对GB2312的补充,编码方式和GB2312类似,只不过区别在于内码不需要去加0XA0了。Unicode编码基本是综合了全世界的文字统一编码,但是如果所有字都用4字节编码的话,浪费空间资源很大,例如一篇英文文件。所以就诞生了UTF-8,他是现在Unicode最常用的实现方式。主要是他的可伸缩的编码方式。非常的实用。具体编码方式在上文中有讲到。