作为标题,是否有理由不使用str()将unicode字符串转换为str ??
>>> str(u'a')
'a'
>>> str(u'a').__class__
<type 'str'>
>>> u'a'.encode('utf-8')
'a'
>>> u'a'.encode('utf-8').__class__
<type 'str'>
>>> u'a'.encode().__class__
<type 'str'>
更新:感谢您的回答,也不知道我是否使用特殊字符创建了一个字符串,它会自动转换为utf-8
>>> a = '€'
>>> a.__class__
<type 'str'>
>>> a
'\xe2\x82\xac'
也是python 3中的Unicode对象
答案 0 :(得分:19)
当您编写str(u'a')
时,它使用默认编码将Unicode字符串转换为字节字符串(除非您遇到changing it的麻烦)将是ASCII
第二个版本将字符串显式编码为UTF-8。
如果尝试使用包含非ASCII字符的字符串,则差异会更明显。第二个版本仍然有效:
>>> u'€'.encode('utf-8') '\xc2\x80'
第一个版本将提供例外:
>>> str(u'€') Traceback (most recent call last): File "", line 1, in str(u'€') UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128)