假设我们
s = u"test\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u7206\u767A\u043E\u043B\u043E\u043B\u043E"
如果我直接尝试打印它,
>>> print s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character u'\u0627' in position 4: illegal multibyte sequence
我需要在Python中将控制台更改为UTF-8(否则它无法理解我的输入)。
import win32console
win32console.SetConsoleOutputCP(65001)
win32console.SetConsoleCP(65001)
然后将字符串编码为utf-8格式输出,因为Python不知道chcp 65001是UTF-8(一个已知的错误)。
>>> print s.encode('utf-8')
testالله أكبر爆発ололоTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 0] Error
如您所见,它在打印到换行符之前一切正常,但一旦遇到换行符就会抛出IOError错误。
以下解决方法有效:
def safe_print(str):
try:
print str.encode('utf-8')
except:
pass
print
>>> safe_print(s)
testالله أكبر爆発ололо
但是肯定有更好的方法。有什么建议吗?
str
。避免与内置函数重名。 - Chris Morgan