我正在尝试找到一个通用的解决方案来从python脚本中打印unicode字符串.
要求是它必须在任何平台上的python 2.7和3.x以及任何终端设置和环境变量(例如LANG = C或LANG = en_US.UTF-8)中运行.
python打印功能在打印时自动尝试编码为终端编码,但如果终端编码为ascii则失败.
例如,以下在环境"LANG = enUS.UTF-8"时有效:
x = u'\xea'
print(x)
Run Code Online (Sandbox Code Playgroud)
但是当"LANG = C"时,它在python 2.7中失败了:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xea' in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
以下工作无论LANG设置如何,但如果终端使用不同的unicode编码,则无法正确显示unicode字符:
print(x.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
如果可能的话,期望的行为是始终在终端中显示unicode,如果终端不支持unicode,则显示一些编码.例如,如果终端仅支持ascii,则输出将为UTF-8编码.基本上,目标是在python打印功能工作时做同样的事情,但是在打印功能失败的情况下,使用一些默认编码.