文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-30 13:36

关注

这篇文章主要介绍“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字符集和字符编码是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯