Python打印无法同时打印Unicode和字符串
下面是我观察到的几个案例。我想知道为什么Python的打印会出现这种情况,以及可能的修复方法Python打印无法同时打印Unicode和字符串,python,unicode,Python,Unicode,下面是我观察到的几个案例。我想知道为什么Python的打印会出现这种情况,以及可能的修复方法 >>> print "%s" % u"abc" # works >>> print "%s" % "\xd1\x81" # works >>> print "%s %s" % (u"abc", "\xd1\x81") # Error 对于上面(最后一个),我得到:UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0x
>>> print "%s" % u"abc" # works
>>> print "%s" % "\xd1\x81" # works
>>> print "%s %s" % (u"abc", "\xd1\x81") # Error
对于上面(最后一个),我得到:UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xd1:序号不在范围(128)
但是,这是有效的
>>> print "%s %s" % ("abc", "\xd17\x81") # works
当我这么做的时候
>>> print "%s %s" % (u"abc", u"\u0441") # Error
其引发的UnicodeEncodeError:“charmap”编解码器无法对位置4:字符映射到的字符u'\u0441'进行编码这是正确的。输出时,必须将unicode对象编码为所需的字符编码,即
utf-8
或其他任何形式。将unicode
(包括所有u”字面值)视为一种抽象,在序列化之前必须编码为类似于utf-8
您可以使用s.encode('utf-8')
将unicode
对象s
编码为utf-8
我建议您使用Python3而不是Python2,因为这更直观。在Python2中混合使用Unicode字符串和字节字符串时,字节字符串将使用默认的
ascii
编解码器隐式强制为Unicode。如果此操作失败,您将获得UnicodeDecodeError
打印Unicode字符串时,它们将以当前输出编码隐式编码。如果此操作失败,您将获得UnicodeEncodeError
因此:
事实上:
>>> print unicode("%s",'ascii') % u"abc" # and valid
print unicode("%s %s",'ascii') % (u"abc", unicode("\xd1\x81",'ascii'))
但是,只有当您的意思是“不抛出错误”时,以下内容才有效。如果希望它打印U+0441个字符,则仅当输出编码为UTF-8时才会这样做。它在我的Windows系统上打印垃圾
>>> print "%s" % "\xd1\x81"
以下给出了由于隐式Unicode解码导致的错误:
print "%s %s" % (u"abc", "\xd1\x81")
这实际上是:
>>> print unicode("%s",'ascii') % u"abc" # and valid
print unicode("%s %s",'ascii') % (u"abc", unicode("\xd1\x81",'ascii'))
\xd1
和0x81
不在0-7Fh的ASCII范围内
最后一个错误表示输出编码不是UTF-8,因为它无法将\u0441
编码为输出编码支持的字符以进行打印。UTF-8可以对所有Unicode字符进行编码。您应该强调:“不要混合使用Unicode和ByTestRing”