Loading

str、bytes、bytearray的区别


返回 我的技术栈(Technology Stack)



str

str以 unicode的呈现形式

Unicode UTF8 ASCII的补充:
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符集(Character set)是多个字符的集合。
字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等

ASCII编码是1个字节,而Unicode编码通常是2个字节。
UTF-8是Unicode的实现方式之一,UTF-8是它是一种变长的编码方式,可以是1,2,3个字节
意思是说如果一个字节表示不了,就用两个字节或3个字节

bytes

bytes是以二进制字节序列的形式表示。
互联网上的数据都是以二进制的方式传输。

Python2 中

>>> type(b'xxxxx')
<type 'str'>
>>> type('xxxxx')
<type 'str'>

Python3 中

>>> type(b'xxxxx')
<class 'bytes'>
>>> type('xxxxx')
<class 'str'>

从上面可以看出,
bytes是Python 3中特有的,Python 2 里不区分bytes和str。

Python3.x对中文字符支持比较好,但是Python2.x则需要在源代码中增加 "#coding:utf-8 "才能支持中文字符

python3中:

str使用encode()方法———>bytes
bytes使用decode()方法———>str
注意:编解码方式必须一样,否则会出现乱码
【decode()默认使用utf-8方式解码】

str 转换成 bytes:

In [1]: str1='人生苦短,我用Python!'

In [2]: type(str1)
Out[2]: str

In [3]: b=str1.encode()

In [4]: b
Out[4]: b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\
xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'

In [5]: type(str1.encode())
Out[5]: bytes

In [6]:  b[:6]=bytearray('生命'.encode())
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-ae77bb5aca20> in <module>()
----> 1 b[:6]=bytearray('生命'.encode())

TypeError: 'bytes' object does not support item assignment

bytes 转换成 str:

In [2]: b
Out[2]: b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\
xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'

In [3]: type(b)
Out[3]: bytes

In [4]: b.decode()
Out[4]: '人生苦短,我用Python!'

In [5]: type(b.decode())
Out[5]: str

bytearray

bytearray和bytes不一样的地方在于,bytearray是可变的。
In [2]: str1
Out[2]: '人生苦短,我用Python!'

In [3]: b1=bytearray(str1.encode())

In [4]: b1
Out[4]: bytearray(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')

In [5]: b1.decode()
Out[5]: '人生苦短,我用Python!'

In [6]: b1[:6]=bytearray('生命'.encode())

In [7]: b1
Out[7]: bytearray(b'\xe7\x94\x9f\xe5\x91\xbd\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')

In [8]: b1.decode()
Out[8]: '生命苦短,我用Python!'

posted @ 2021-07-01 23:11  言非  阅读(235)  评论(0编辑  收藏  举报