python3中的bytes和string

Posted 野百合有春天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3中的bytes和string相关的知识,希望对你有一定的参考价值。

原文链接:https://www.cnblogs.com/abclife/p/7445222.html

 

python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分。文本总是用unicode进行编码,以str类型表示;而二进制数据以bytes类型表示。

在python3中,不能以任何隐式方式将str和bytes类型二者混合使用。不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之亦然)。

 

字符串和字节符之间划分界线是必然的。下面这个图解要牢记于心:

strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings:

1
2
3
4
>>> \'€20\'.encode(\'utf-8\')
b\'\\xe2\\x82\\xac20\'
>>> b\'\\xe2\\x82\\xac20\'.decode(\'utf-8\')
\'€20\'

可以这样理解:

string是文本(text)的抽象表示。字符串(string)由字符组成,字符也是抽象的实体且与任何二进制表示无关。
当操纵字符串的时候,很多细节是不用了解的。我们可以分割、切片和拼接字符串,在字符串内部进行搜索。但并不在乎内部是如何表示的,也不用在意底层一个字符要花费多少byte。
只有在需要将string编码(encode)成byte的时候,比如:通过网络传输数据;或者需要将byte解码(decode)成string的时候,我们才会关注string和byte的区别。

 

传入encode和decode的参数是编码方式。编码是一种用二进制数据表示抽象字符的方式。目前有很多种编码。上面给出的UTF-8是其中一种,下面是另一种:

1
2
3
4
>>> \'€20\'.encode(\'iso-8859-15\')
b\'\\xa420\'
>>> b\'\\xa420\'.decode(\'iso-8859-15\')
\'€20\'

编码是这个转换过程中至关重要的一部分。若不编码,bytes对象b\'\\xa420\'只是一堆比特位而已。编码赋予其含义。采用不同的编码,这堆比特位的含义就会大不同:

1
2
>>> b\'\\xa420\'.decode(\'windows-1255\')
\'₪20\'

以上是关于python3中的bytes和string的主要内容,如果未能解决你的问题,请参考以下文章

golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出

python基础入门:bytes 和 string转换的方法

python3 字符串string 转换成to 字节bytes

Python3 中的 str 和 bytes

Python3中的bytes和str类型

golang代码片段(摘抄)