字符编码那些事儿:ASCII,GB2312,Unicode和UTF-8

写作目的:字符编码是计算机技术的基础,想要提高工作效率,降低缺陷产生概率,就必须懂一点点字符编码知识。
在这里插入图片描述

一、ASCII码

产生背景:
我们知道,计算机只能处理0和1,任何符号都转换为0和1的序列才能处理。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。

不足:
ASCII码只解决了英文编码问题,没有解决其他国家语言编码问题。
随着计算机的发展和互联网的发展,不同国家,地区都在使用计算机;每个国家都有自己的语言,如中国有中文,法国使用法语等。ASCII只能表示128个字符,英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。

二、GB2312

产生背景:
ASCII码只解决了英文编码问题,没有解决其他国家语言编码问题,每个国家符号数量都不一样,就各自指定了自己的编码。例如我们中国就制定了GB2312编码,GB2312编码用2个字节表示一个字符。

不足:
虽然中文有了自己的编码:GB2312,但是其他国家也有自己的语言编码,与其他国家进行通信交流时,编码格式和含义不一致,会造成乱码,没法交流。

三、Unicode

产生背景:
Unicode编码的产生,就是为了解决多种编码乱码问题
不足:
容易造成存储的极大浪费
们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

四、UTF-8

产生背景:
解决了Unicode存储浪费问题,需要说明的是:UTF-8 是 Unicode 的实现方式之一。
不足:
目前被广泛使用

五、decode与encode

在这里插入图片描述

decode英文意思是 解码,encode英文原意 编码
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码, 即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值