鍍金池/ 問答/Python/ python中str和byte有什么區(qū)別呢?

python中str和byte有什么區(qū)別呢?

import base64
x=u"121kjk"
print(x,type(x))
y=x.encode("utf-8","strict")
print(y,type(y))
z=base64.b64encode(y)
print(z,type(z))
z1=base64.decodebytes(z)
print(z1,type(z1))
z2=z1.decode("utf-8")
print(z2,type(z2))

121kjk <class 'str'>
b'121kjk' <class 'bytes'>
b'MTIxa2pr' <class 'bytes'>
b'121kjk' <class 'bytes'>
121kjk <class 'str'>

bytes類型前面多了個b,感覺和str沒有什么區(qū)別啊?請教兩者的區(qū)別,謝謝

回答
編輯回答
瘋浪

你用的是python3, 那個前綴u不用加,不然反而誤導(dǎo):

python2: str   -> decode -> Unicode      -> encode -> str
python3:  bytes -> decode -> str(Unicode) -> encode -> bytes

你加些中文就能看出區(qū)別了:

import base64
x = "你好啊xx"
print(x)
print(x.encode('utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8axx'

比如這里utf-8以3個字節(jié)表示一個漢字,最后兩個xx因為是在ascii集合里,所以會打印為可讀字符

2018年3月21日 04:46