看似简单的问题:如何在
Python3中打印()字符串?应该是一个简单的:
print(my_string)
但这不起作用.根据my_string的内容,环境变量和您使用的操作系统将引发UnicodeEncodeError异常:
>>> print("\u3423")
Traceback (most recent call last):
File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character '\u3423' in position 0: ordinal not in range(128)
是否有一种干净的便携方式来解决这个问题?
扩展一点:这里的问题是Python3字符串包含Unicode编码字符,而终端可以有任何编码.如果你很幸运,你的终端可以处理字符串中包含的所有字符,一切都会好的,如果你的终端不能(例如有人设置LANG = C),那么你得到一个例外.
如果在Python3中手动编码字符串,则可以提供忽略或替换不可编码字符的错误处理程序:
"\u3423".encode("ascii", errors="replace")
对于print()我没有看到插入错误处理程序的简单方法,即使有,一个简单的错误处理程序似乎是一个可怕的想法,因为它会修改数据.一个条件错误处理程序可能会工作(即检查isatty()并根据该做什么来决定),但是看起来非常麻烦只是为了打印()一个字符串,我甚至不确定它会不会在某些情况下失败.
一个现实世界的例子,这个问题就是这个例子: