我试图创建一个新的字符串,其中包含一个以上的特殊字符。这不起作用:
# -*- coding: utf-8 -*-
str1 = "I am"
str2 = "español"
str3 = "%s %s %s" % (str1, u'–', str2)
print str3
>> Traceback (most recent call last):
File "myscript.py", line 5, in <module>
str3 = "%s %s %s" % (str1, u'–', str2)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
奇怪的是,如果我删除ñ
或–
字符,它会正确地创建字符串:
或者:
# -*- coding: utf-8 -*-
str1 = "I am"
str2 = "español"
str3 = "%s %s" % (str1, str2)
print str3
>> I am español
怎么了?在
您正在混合Unicode字符串和字节字符串。别那么做。确保所有的字符串都是同一类型的。最好是
unicode
。在当混用
str
和unicode
时,Python隐式地将使用ASCII编解码器对其中一种类型或另一种类型进行解码或编码。通过显式地编码或解码来避免隐式操作,使所有内容都成为一种类型。在这就是导致}),但是只有{}可以被解码为ASCII。
UnicodeDecodeError
异常的原因;您混合了两个str
对象(字节字符串,str1
和{str3
包含UTF-8数据,因此解码失败。显式地创建unicode
字符串或对数据进行解码可以使工作正常进行:或者
^{pr2}$请注意,我也为格式化字符串使用了Unicode字符串文本!在
你真的应该阅读Unicode、编解码器和Python。我强烈推荐以下文章:
相关问题 更多 >
编程相关推荐