我想知道当您在 unicode 字符串上调用 str() 时内部会发生什么。
# coding: utf-8
s2 = str(u'hello')
s2 只是 str() arg 的 unicode 字节表示吗?
我想知道当您在 unicode 字符串上调用 str() 时内部会发生什么。
# coding: utf-8
s2 = str(u'hello')
s2 只是 str() arg 的 unicode 字节表示吗?
它将尝试使用您的默认编码对其进行编码。在我的系统上,这是 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