python中str和byte有什么区别呢?

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没有什么区别啊?请教两者的区别,谢谢

阅读 4.1k
1 个回答

你用的是python3, 那个前缀u不用加,不然反而误导:

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

你加些中文就能看出区别了:

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

比如这里utf-8以3个字节表示一个汉字,最后两个xx因为是在ascii集合里,所以会打印为可读字符

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题