randomString.decode(“utf-8”)VS str(randomString,“utf-8”)有什么区别?

时间:2016-10-07 02:32:13

标签: encoding utf-8 python-3.5

randomString.decode(“utf-8”)VS str(randomString,“utf-8”)之间有什么区别? 我看到它们相同,但是当我尝试它们时,结果却变得不同了!

  

>>> randomString =“Hello World”
  >>> str(randomString)
  \'Hello World'   >>> randomString.decode(“utf-8”)
  追溯(最近的呼叫最后):
   文件“< input>”,第1行,在中   AttributeError:'str'对象没有属性'decode'
  >>> randomString.encode()
  b'Hello World'
  >>> bString = randomString.encode()
  >>> bString.decode()
  'Hello World'
  >>> STR(bString)
  “b'Hello World”


我真的不明白普通字符串和字节字符串之间的区别吗? 帮助PLZ!

1 个答案:

答案 0 :(得分:0)

阅读(Python) Built-in Functionsstr() in detail

class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
     

返回对象的字符串版本。如果未提供对象,则返回   空字符串。否则,str()的行为取决于是否   给出了编码或错误,如下所示。

     

如果既没有给出编码也没有给出错误,str(object)返回   object.__str__(),这是“非正式”或可打印的字符串   对象的表示。对于字符串对象,这是字符串   本身。如果对象没有__str__()方法,则str()会失败   回到repr(object)

     

如果给出了至少一个编码或错误,则对象应为a   bytes-like object(例如bytesbytearray)。在这种情况下,如果是对象   是字节(或 bytearray )对象,然后是str(bytes, encoding, errors)   相当于 bytes.decode(encoding, errors)。否则,在调用之前获取缓冲区对象下的字节对象   bytes.decode()。有关缓冲区对象的信息,请参阅Binary Sequence Types — bytes, bytearray, memoryviewBuffer Protocol

请注意,上述引用文字中未明确指定所有链接。

示例(Python 3.5.1):

>>>
>>> randomString = 'latin, ελληνικά, кириллица'
>>>
>>> print (str(randomString.encode(),"utf-8") == randomString.encode().decode())
True
>>>