我有一个奇怪的问题:
>>> a=u'Pal-Andr\xe8'
>>> b='Pal-Andr\xc3\xa8'
>>> print "%s %s" % (a,b) # boom
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 8: ordinal not in range(128)
>>> print "%s" % a
Pal-Andrè
>>> print "%s" % b
Pal-Andrè
在这里我可以分别打印a,b,但不能同时打印。在
怎么了?我怎样才能把它们都打印出来?在
实际问题是
现在,
^{pr2}$b
有一个字符串文本而不是unicode文本。因此,当您将它们分别打印为字符串时,a
被视为Unicode字符串,b
被视为普通字符串。在注意开头的
u
丢失。你可以进一步确认但是当您将它们一起打印时,string将变成unicode字符串,
\xc3
不是有效的ASCII代码,这就是代码失败的原因。在要修复它,只需将
b
声明为unicode文本,如下所示混合使用Unicode和字节字符串会使组合打印尝试将所有内容升级为Unicode字符串。必须用正确的编解码器解码字节字符串,否则Python2将默认为
ascii
。b
是一个用UTF-8编码的字节字符串。格式字符串也被提升了,但它恰好是从ASCII解码的。最好在任何地方使用Unicode:我不知道这里真正的问题是什么,但有一件事可以肯定的是a是unicode字符串,b是字符串。在
在打印它们之前,您必须对其中一个进行编码或解码。在
这里有一个例子。在
相关问题 更多 >
编程相关推荐