Python不能连接超过1个nonascii字符串

2024-06-07 13:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个新的字符串,其中包含一个以上的特殊字符。这不起作用:

# -*- 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)

奇怪的是,如果我删除ñ字符,它会正确地创建字符串:

^{pr2}$

或者:

# -*- coding: utf-8 -*-
str1 = "I am"
str2 = "español"
str3 = "%s %s" % (str1, str2)
print str3
>> I am español

怎么了?在


Tags: 字符串inmostamutfprintoltraceback
1条回答
网友
1楼 · 发布于 2024-06-07 13:22:58

您正在混合Unicode字符串和字节字符串。别那么做。确保所有的字符串都是同一类型的。最好是unicode。在

当混用strunicode时,Python隐式地将使用ASCII编解码器对其中一种类型或另一种类型进行解码或编码。通过显式地编码或解码来避免隐式操作,使所有内容都成为一种类型。在

这就是导致UnicodeDecodeError异常的原因;您混合了两个str对象(字节字符串,str1和{}),但是只有{}可以被解码为ASCII。str3包含UTF-8数据,因此解码失败。显式地创建unicode字符串或对数据进行解码可以使工作正常进行:

str1 = u"I am"     # Unicode strings
str2 = u"español"  # Unicode strings
str3 = u"%s %s %s" % (str1, u'–', str2)
print str3

或者

^{pr2}$

请注意,我也为格式化字符串使用了Unicode字符串文本!在

你真的应该阅读Unicode、编解码器和Python。我强烈推荐以下文章:

相关问题 更多 >

    热门问题