ASCII、gbk、Unicode、utf编码介绍及异同
发布日期:2021-06-27 12:56:18 浏览次数:80 分类:技术文章

本文共 2102 字,大约阅读时间需要 7 分钟。

ASCII、Unicode、GBK、UTF编码介绍及异同

使用Python时会时常遇到编码问题,这是我的一些小结。
参考链接:

相关概念

  • 字符
    各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等

  • 字符集
    一个系统支持的所有抽象字符的集合。字符是文字和符号的总称,包含各个国家文字、标点符号、图像符号、数字等。它为每一个字符分配一个唯一的ID,一般称之为码位、码点。

  • 字符编码
    它是一套规则,使用该规则能够将自然语言的字符的一个集合与其他东西的一个集合进行配对,在符号集合和数字系统中建立映射联系。在计算机中,处理信息是利用元件不同状态组合来存储和处理信息的,因此,字符编码就是将符号转化为计算机可以接受的数字系统的数,称为数字代码。它将上面字符集的码位转化为字节序列的规则,此过程称之为编码、解码。

  • 常见字符集 : ASCII字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

  • 常见字符编码
    ASCII只有一种;大多数MBCS(包括GB2312,GBK)也只有一种;Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方式编码。

字符编码种类

  • ASCLL编码
    ASCII码是西欧编码的方式,采取7位编码,所以是2^7=128,共可以表示128个字符,包括34个字符,(如换行LF,回车CR等),其余94位为英文字母和标点符号及运算符号等。
    在这里插入图暗示出来了片描述

  • 非ASCII码
    英语用128个符号编码足够了,但是用来表示其他语言显然是不够的,于是,欧洲有些国家利用字节中闲置的最高位编入了新的符号,这样一来,欧洲国家使用的编码体系,可以最多表示256个字符。 但是到了亚洲国家,使用的符号更多了,光汉字就10万多个,一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如常见的GB2312编码,使用两个字节表示一个汉字,所以理论上最多可以表示256*256=65536个符号。

    • GB2312
      GB2312是1981年开始实施的一套汉字处理的编码方案,GB是“基本”的意思,GB2312是对ASCII进行了扩展,在原来ASCII的基础上扩充了6000多个汉字和600多个其他字符,是我们使用的较早的一个汉字编码版本。
    • GBK码
      GBK编码是对GB2312的扩展,完全兼容GB2312。采用双字节编码方案,剔出xx7F码位,共23940个码位,共收录汉字和图形符号21886个,GBK编码方案于1995年12月15日发布。它几乎完美支持汉字,因此经常会遇见GBK与Unicode的转换。
    • Unicode码
      unicode编码表中包含了世界上所有国家的所有字符和符号的编码。
      unicode编码是一种概念,在最新的规范中,所有的字符一概使用四个字节表示,网上有很多说unicode用两个字节表示一个字符是不对的,Unicode字符分为17组编排,0x0000 至 0xFFFF,而每平面拥有65536个码位,共1114112个。
    • UTF字符编码
      随着互联网的发展,强烈要求出现一种统一的编码方式。UTF8就是在互联网中使用最多的对Unicode的实现方式。还有其他实现,比如UTF16(字符用2个字节或者4个字节表示),UTF32(字符用4个字节表示)。UTF8是Unicode的实现方式之一,也是最为常见的实现方式。
      • utf-8字符编码

        特点: 1.UTF-8灵活性很强,用1~4个字节表示一个字符。 2. 当字符在ASCII中可以被表示时,UTF-8编码方式就用一个字节来表示它。 3. 在UTF-8中汉字用3个字符来表示。 4. unicode中所有的字符一概使用两个字节表示。从unicode到UTF-8并不是直接的对应,而是要过一些算法和规则来转换。
      • UTF-16字符编码

        特点: 1.在绝大多数情况下,UTF-16中一个字符固定使用两个字节编码,一个字符两个字节是UTF-16编码的概念。 2.在极少数情况下也会出现三个字节表示一个字符的情况。 由于UTF-16固定使用两个字节表示一个字符,所以UTF-16不能与ASCII兼容。 3.在不同的机器中UTF-16存在因存储方式不同(大端法和小端法)导致数据有误,因此存在UTF16-LE和UTF16-BE两种UTF16的变体。 4.相比较UTF-8,在存储中文方面,UTF16更加结合空间。 5.UTF-16容错情况比UTF-8好,因为UTF-16稳定使用两个字节编码,如果数据错误不会连代其他数据被读错,而UTF-8是变长编码,可能导致后面的字符全部错误。 6.UTF-16广泛应用在各种系统中。
      • UTF-32字符编码
        UTF-32可以说是“真正”的unicode编码,unicode用四个字节表示一个字符的特点在UTF-32中实现了,理论上这样根本不需要复杂的分配字节的方法,只需要每个字符一一对应即可,而且UTF-32的超大容量装得下任何的字符。但是问题也就在这里,一个字符需要四个字节太过于奢侈,UTF-32并不是一个很常用的编码方法。

转载地址:https://blog.csdn.net/weixin_43458262/article/details/85947330 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:windows10 降低磁盘的方法
下一篇:centos7.6安装solr6.6过程详解

发表评论

最新留言

感谢大佬
[***.8.128.20]2023年03月17日 13时02分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

jquery ajax php 上传图片,jquery + ajax +php 实现上传图片 2019-12-06 20:23:36
php echo json节点,php 怎么接受别人echo出来的 json ? 2019-12-06 20:23:36
信鸽 php message,信鸽接入总结 2019-12-06 20:23:36
php数值要反着写,php操作颜色数值转换颜色为其反色 2019-12-06 20:23:37
php中file用法,php中__FILE__常量用法简介 2019-12-06 20:23:37
Java1.8接口方法都是抽象,判断(1分) Java接口中所有的方法都是抽象的。 2019-12-06 20:23:37
java servlet 过滤,Java Web--Servlet--Filter过滤器 2019-12-06 20:23:37
php导出csv超时,php – 处理非常大的csv文件没有超时和内存错误 2019-12-06 20:23:37
python2018年面试题_2018年最新Python面试题及答案精编 2019-12-06 20:23:34
php 上传图片 中文,PHP 文件上传 2019-12-06 20:23:35
怎么表示一个PHP语句块,代码块之间的PHP变量范围 2019-12-06 20:23:35
dict去重python_python sorted() count() set(list)-去重 2019-12-06 20:23:35
php pdo要释放资源,php如何关闭pdo 2019-12-06 20:23:35
php保活,保活Docker容器与supervisord 2019-12-06 20:23:35
js文件引用php变量,php 引用js变量 2019-12-06 20:23:35
java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法 2019-12-06 20:23:36
java写安卓布局_java – Android主布局模板 2019-12-06 20:23:33
java 8 switch用法_Java14新特性:Switch表达式 2019-12-06 20:23:33
java 泛型类型擦除后获得类型_Java泛型类型擦除以及类型擦除带来的问题 2019-12-06 20:23:33
java启动设置堆内存参数_005. 深入JVM学习—Java堆内存参数调整 2019-12-06 20:23:33