gpt4 book ai didi

python - 无论环境如何,在 python 中打印 unicode 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:24 24 4
gpt4 key购买 nike

我正试图找到一个通用的解决方案来从 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)

但是当“LANG=C”时它在 python 2.7 中失败:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xea' in position 0: ordinal not in range(128)

以下内容与 LANG 设置无关,但如果终端使用不同的 unicode 编码,则无法正确显示 unicode 字符:

print(x.encode('utf-8'))

如果可能,理想的行为是始终在终端中显示 unicode,如果终端不支持 unicode,则显示一些编码。例如,如果终端仅支持 ascii,则输出将采用 UTF-8 编码。基本上,目标是在 python 打印函数工作时做同样的事情,但在打印函数失败的情况下,使用一些默认编码。

最佳答案

您可以处理 LANG=C案例讲述sys.stdout在默认为 ASCII 的情况下默认为 UTF-8。

import sys, codecs

if sys.stdout.encoding is None or sys.stdout.encoding == 'ANSI_X3.4-1968':
utf8_writer = codecs.getwriter('UTF-8')
if sys.version_info.major < 3:
sys.stdout = utf8_writer(sys.stdout, errors='replace')
else:
sys.stdout = utf8_writer(sys.stdout.buffer, errors='replace')

print(u'\N{snowman}')

上面的代码片段满足您的要求:它适用于 Python 2.7 和 3.4,并且在 LANG 时不会中断。处于非 UTF-8 设置中,例如 C .

not a new technique ,但在文档中很难找到。如上所述,它实际上尊重非 UTF-8 设置,例如 ISO 8859-* .只有在 Python 假装默认为 ASCII 并破坏应用程序的情况下,它才会默认为 UTF-8。

关于python - 无论环境如何,在 python 中打印 unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com