Python字符集和字符编码是什么

发布时间:2022-05-11 13:38:18 作者:zzz
来源:亿速云 阅读:102

这篇文章主要介绍“Python字符集和字符编码是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python字符集和字符编码是什么”文章能帮助大家解决问题。

首先计算机存储的基本单位是字节,由8个比特位组成,由于英文字母算上大小写只有52个,再加上若干字符,数量不会超过256个,因此一个字节完全可以表示。但是随着计算机的普及,越来越多的非英文字符出现,导致一个字节已经无法表示了。所以只能曲线救国,对于一个字节无法表示的字符,使用多个字节表示

但是这样会出现两个问题:

到这里我们先不继续往下深入,我们先来理清楚一些概念。

字符集和字符编码

估计有很多小伙伴搞不清这两者的区别,我们先来解释一下所谓的字符集和字符编码是怎么一回事?

字符集:系统支持的所有字符组成的集合,像ASCII、GB2312、Big5、unicode都属于字符集。只不过不同的字符集所能容纳的字符个数不同,比如ASCII字符集中不包含中文,unicode则可以容纳世界上的所有字符;

字符编码:负责将每个字符转换成一个或多个计算机可以接受的具体数字,该数字可以理解为编号,因此字符编码维护了字符和编号之间的对应关系。而编码也分为多种,比如ascii、gbk、utf-8等等,字符编码不同,那么字符转换之后的编号也不同,当然能转化的字符种类也不同。比如ASCII这种字符编码,它就只能转换ASCII字符。

当然,ASCII比较特殊,它既是字符集、也是字符编码。并且不管采用什么编码,ASCII字符对应的编号永远是相同的。

将字符串中的每一个字符转成对应的编号,那么得到的就是字节序列(bytes对象),因为计算机存储和网络通讯的基本单位都是字节,所以字符串必须以字节序列的形式进行存储或传输。

因此字符串和字节序列在某种程度上是很相似的,字符串按照指定的编码进行encode即可得到字节序列,也就是将每个字符都转成对应的编号;字节序列按照相同的编码decode即可得到字符串,也就是根据编号找到对应的字符。

比如我们写了一段文本,然后在存储的时候必须先进行编码,也就是将每一个字符都转成一个或多个系统可以接受的数字、即对应的编号之后,才可以进行存储。

s = "你好"
# 编码之后就是一串数字
print(s.encode("gbk"))  # b'\xc4\xe3\xba\xc3'

假设文本中只有你好二字,在存储的时候采用gbk进行编码,那么在读取的时候也必须使用gbk进行解码,否则的话就会无法解析而报错。因为字符编码不同,字符对应的编号也不同。

再比如每个国家都有自己的字符编码,你在日本的一台计算机上写好的文件拿到中国的计算机上打开,很有可能出现乱码。因为字符编码不同,字符和编号之间的对应关系也不同,采用不同的字符编码进行解析肯定会出问题。

但我们说,对于ASCII字符来说,由于不管采用哪一种编码,它们得到的编号都是固定的。所以编码对于ASCII字符来说,没有任何影响。

s = "abc"
print(s.encode("gbk"))  # b'abc'
print(s.encode("gbk").decode("utf-8"))  # abc

# 但如果是非ASCII字符,就不行了
try:
    s = "你好"
    s.encode("gbk").decode("utf-8")
except UnicodeError as e:
    # 报错了,无法解析
    print(e)  
    # 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

这里我们再回忆一下bytes对象,我们创建的时候可以采用字面量的方式,比如 b"abc",但是 b"憨"却不可以。原因就是憨这个字符不是ASCII字符,那么采用不同的字符编码,其对应的编号是不同的,而这种方式Python又不知道我们使用哪一种编码,所以不允许这么做,而是需要通过"憨".encode的方式手动指定字符编码。

但是对于 ASCII 字符而言,不管采用哪一种字符编码,得到的编号都是一样的, 所以Python针对ASCII字符则允许这种做法,比如b"abc"。并且我们看到,对于汉字来说,在编码之后会对应多个编号,而每个编号占1字节,因此不同的字符所占的大小可能不同。

关于“Python字符集和字符编码是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. MySQL--字符编码和字符集
  2. MySQL中GBK字符集和UTF8字符编码的相关操作

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:在Python中如何存储字符串

下一篇:C语言动态内存分配函数如何使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》