在Python 2中,str和字节是相同的类型:
>>> bytes is str
True
在Python 3中,str类型是Python 2的unicode类型,它是所有字符串的默认编码。
假设unicode字符串正在与字节进行比较,
字符串是一个字符序列,即unicode codepoints;这些是一个抽象的概念,不能直接存储在磁盘上。字节字符串是一个不出奇的字节序列,可以存储在磁盘上。它们之间的映射是一个编码 – 有很多这些(和无限多可能) – 你需要知道哪些应用在特定情况下为了进行转换,因为不同的编码可能映射相同的字节到不同的字符串:
>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-16')
'蓏콯캁澽苏'
>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-8')
'τoρνoς'
一旦你知道要使用哪个,你可以使用字节字符串的.decode()方法从它得到正确的字符串如上。为了完整性,字符串的.encode()方法以相反的方式:
>>> 'τoρνoς'.encode('utf-8')
b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'