正确输出兼容Python 2和3的非ascii字符的最佳方法是什么?是这个吗?
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
print("ȧƈƈḗƞŧḗḓ uʍop-ǝpısdn ŧḗẋŧ ƒǿř ŧḗşŧīƞɠ")
该方法的一个问题是,在输出受限(例如)到ascii
或latin1
的情况下,它不会优雅地降级。默认行为是引发异常,如:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
...我更喜欢逃避'replace' or 'backslashreplace' error handling methods等。有没有办法配置sys.stdout
使用这些方法之一?这样做是否合理?
在StackOverflow上已经讨论了Python中的Unicode编码,例如: How to write utf8 to standard output in a way that works with python2 and python3,snapshoe's answer和有用comment by Martijn Pieters。还Setting the correct encoding when piping stdout in Python。
但我仍然没有看到明确的"最好的"方式,特别是关于优雅地处理错误。