NLP基础编程------中文编码

    科技2022-07-11  126

    0. ASCII

    1个字节,使用其中七位二进制数,定义128个字符最高位不使用,恒等为0.

    1. 扩展ASCII( ISO 8859)

    原有ASCII 表示128位,最高位不用扩展ASCII使用第一位后,7位扩展到8位.增加128个码元,扩展到256,增加了一些欧洲国家的字母,主要为拉丁系但是对于中文还是不够

    2. GB2312-80(又叫国标码)

    汉字有多少个?

    汉字标准共有 6763 个, 其中一级 3755, 二级 3008, 还有 682 非汉字字符。ASCII一个字节表示字母(但是只用七位,最高为为0),但是汉字太多,需要两个字节

    2.1 GB2312编码中的区位码

    2*7 (两个) * (不含首位的七位)这些二进制位表示什么?设计字符集,该字符集分为94区,每一个区含有94位,共8836个码位(见下图)区位码:汉字在 94×94 二维表中的位置,行(区)号,列(位)号 如图,y的编码为 03区,8行9号由此可以得到表示方法: 第一个7位二进制表示区号,第二个表示位号(这不就一一对应上了吗).

    2.2 GB2312编码中的交换码

    区位码和国标码的换算关系是:

    区码和位码分别加上十进制数 32 。如“国”字在表中的 25 行 90 列,其区位码为 2590 ,国标码是 397AH 。

    上述引出交换码: 为了避开 ASCII 码中的控制码(00H-1FH),区位码的区号和位号都加上 020H(十进制:32)方便兼容ASCII.

    再思考一下,7位范围是128,而汉字表示只用94位,剩下的可以用来表示其他的.

    3.3 机内码

    机内码: 计算机系统中:存储,处理,传输汉字时使用的统一编码形式机内码:汉英混合文本中,为了避免和单字节的 ASCII 码混淆,将交换码的两个字节最高位都改为 1,变成机内码.(注意上面我一直在说7位,就是这个原因)但是! 上述编码能表示6763个汉字,但是并不全,于是??

    4. GBK

    对应改变如图

    5. GB18030

    再次改变,新增几千少数民族字符

    6. Unicode

    上述编码是考虑加入中文,但是如何将世界上所有的语言全部加入?因此有了Unicde编码.

    目的:将世界上所有字符编码到一起并编号

    包含字符集和对应的编码规则

    主要有两种形式, UCS-2 : 16位, UCS-4: 32位,但是UCS-4太大了(32位),

    可随着互联网发展,又必须有一个这样的统一编码.于是,出现了utf-8.

    7. UTF-8

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。

    它可以用一至四个字节对Unicode字符集中的所有有效编码点进行编码,属于Unicode标准的一部分.

    换句话说,就是utf-8将UCS-4字符集的码位划分成四个区间,划分格式如下:

    左边为对应划分区间,右边为对应区间需要加的前缀码.

    举例子,将"王"在UCS-4字符集里面的码位转换成utf-8编码,如图:

    8. 字节序

    在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。就是上述多字节实际存储到物理内存中,存储排列顺序字节的排列方式有两个通用规则。例如,将一个多位数的低位放在较小的地址处,高位放在较大的地址处,则称小端序;反之则称大端序



    Big Endian 和 Little Endian优劣

    Big Endian: 判别一个数的正负很容易,只要取offset0处的一个字节就能确认。

    Little Endian: 长度为1,2,4字节的数,排列方式都是一样的,数据类型转换非常方便。

    参考

    1 . wiki/UTF-8 2 . 李正华老师pdf 3 . B站视频-非常详细的字符编码讲解 4. wiki字节序

    Processed: 0.008, SQL: 8