什么原因导致打印功能挂起?我应该用什么安全打印?

时间:2011-07-07 03:01:23

标签: python debugging character-encoding

在使用print语句调试UnicodeDecodeError时,我很难理解发生了什么。

我对自己的疯狂理论感到困惑,但最终问题只是打印一个特定的字符串:

print '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg' 

导致它挂起的原因是什么?

我应该使用什么来打印到控制台? print repr(x)

2 个答案:

答案 0 :(得分:2)

在我的Linux上运行正常

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg' 
未命名.jpg

您使用的是哪种控制台?也许它有一个bug

答案 1 :(得分:0)

这似乎是UTF8编码的字符串:

>>> '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg'.decode('utf8')
u'\u672a\u547d\u540d.jpg'

如果您的控制台只能处理ASCII,而不是(比方说)UTF-8,它会崩溃,因为无法将这一系列字节解码为ASCII可表示的字符串:

>>> '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d.jpg'.decode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

您需要使用支持UTF-8的控制台。