变长编码的优缺点 为什么Linux系统默认使用utf8编码?
为什么Linux系统默认使用utf8编码?
GBK是微软为简体中文开发的本地代码,被工信部起诉。每个国家或地区都会制定和使用自己的地方代码,一些企业也会制定某个国家或地区的地方代码(GBK是微软制定的简体中文代码)。当打开用本地代码编写的文件而不指定使用的本地代码时,可能会看到乱码。
为了解决本地编码混乱的问题,Unicode和ISO这两个组织已经开始开发一种字符编码系统,可以容纳不同国家的字符而不发生冲突。目前,这两个组织相互承认,并有兼容的编码。
目前,许多计算机系统使用2字节(16位整数)或4字节(32位整数)统一编码。统一编码只描述每个字符的编码,但没有解释如何将编码存储在存储介质上。
目前,计算机系统中有前高字节和前低字节两种整数存储模式,因此前高字节的数据在前低字节的系统中会出现异常,反之亦然。同时,我们知道很多编程系统在处理字符串时,都会把值为0的字节作为字符串的结尾,不管是前高字节还是前低字节,字符串中都会出现大量值为0的字节,因此传统的字符串处理功能无法使用。
为了解决统一编码的存储和与现有字符串处理函数兼容的问题,引入了utf8编码。这种编码规定了统一编码的存储方式,并确保值为0的字节仍然用作字符串的结尾,这样就可以继续使用原来的字符串处理函数,而不需要开发新的集合。
当然,utf8有问题。统一编码的字符可以编码为一个字节、两个字节、三个字节、四个字节(版本1)或六个字节(版本2)。
不等长编码是什么?
不等长编码包括哈夫曼编码、香农编码、法诺编码等。哈夫曼编码是一种编码方法,是一种用于无损数据压缩的熵编码(加权编码)算法。
在计算机数据处理中,哈夫曼编码使用可变长度编码表对源符号(如文件中的字母)进行编码。可变长度编码表是通过评估信源符号出现概率的方法得到的。出现概率高的字母采用较短的编码,而出现概率低的字母采用较长的编码,使得编码后的字符串更容易压缩,减少了数据的平均长度和期望值,从而达到无损数据压缩的目的。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。