在unicode字符串上调用str()会发生什么?

时间:2013-06-26 03:03:02

标签: python python-2.7 unicode

我想知道在unicode字符串上调用str()时内部会发生什么。

# coding: utf-8
s2 = str(u'hello')

s2只是str()arg的unicode字节表示吗?

1 个答案:

答案 0 :(得分:5)

它会尝试使用您的默认编码对其进行编码。在我的系统上,这是ASCII,如果有任何非ASCII字符,它将失败:

>>> str(u'あ')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128)

请注意,如果您在其上调用encode('ascii'),则会出现同样的错误:

>>> u'あ'.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128)

正如您可能想象的那样,str处理某些参数并对其他参数失败,这使得编写乍一看似乎的代码变得容易,但是一旦您抛出一些国际代码就会停止工作那里的人物。 Python 3通过明显地解决问题来避免这种情况:如果没有显式编码,您无法将Unicode转换为字节字符串:

>>> bytes(u'あ')
TypeError: string argument without an encoding