接上一篇,我们继续学习bytes对象和str对象,学习之前,先看一下它们的区别与联系。
Python3的新特性之一就是明确了字符串和二进制数据流的区别与联系。bytes对象只负责以二进制字节流的方式来记录所需的对象,至于对象到底是什么字符,则由相应的编码方式决定。字符串统一由str对象表示,不需要关心编码。计算机通过字节序列与内存和网络交互,字节序列统一由bytes对象表示。所以在存储和传输str对象的时候,需要将其编码为bytes对象。
编码是什么呢?编码就是把一个字符用一个二进制来表示。我们可以感觉到所有的英文、中文和符号等,最终在电脑中的形式都是类似00101100这些东西。计算机内部,读和写数据归根结底就是处理0和1组成的比特流。问题是0和1组成的比特流可读性不好,人类看不懂。字符编码就是把0和1这些比特流翻译成人们可以理解的字符。
ASCII编码,它规定一个字节(0000 0000)8个比特位代表一个字符的编码。举个例子,01000001表示大写字母A,有时我们也说十进制65表示A在ASCII中的编码,8个比特最多可以表示255个字符。
当计算机普及到中国之后,中国的中文需要在计算机内表示,ASCII的255位远远不够。于是有一个标准组织制定了叫做UNICODE的标准编码。它规定任何一个字符(哪个国家都可)至少以两个字节表示,可以更多。英文字母需要两个字节,汉字需要三个字节。这与英文字母需要一个字节的ASCII编码不兼容。
后来就有UTF-8编码应用而生,它规定英文字母用一个字节表示,中文用三个字节表示。这样就兼容了ASCII,UTF-8很快就得到了广泛应用。
可以看出,str字符串 s = ‘你真的了解bytes和str吗’ 的bytes表示为b’\xe4\xbd\xa0\xe7\x9c\x9f\xe7\x9a\x84\xe4\xba\x86\xe8\xa7\xa3bytes\xe5\x92\x8cstr\xe5\x90\x97’。其中,前边的b表示这是一个bytes类型。
现在我们可以猜想一下,接下来要介绍的bytes对象和str对象,一个要包含解码方法,一个要包含编码方法。待下一篇我们在源码中一探究竟。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/75243.html