2021-05-12

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 


前言

今天在转换文字时,发现编码是个感兴趣的东西,所以就自己总结了一下,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最常用的实现方式。主要是他的可伸缩的编码方式。非常的实用。具体编码方式在上文中有讲到。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值