python3中的UnicodeEncodeError

Mir*_*ac7 6 python unicode locale utf-8 python-3.x

我的一些应用程序库依赖于能够将 UTF-8 字符打印到 stdout 和 stderr。因此,这不能失败:

print('\u2122')
Run Code Online (Sandbox Code Playgroud)

在我的本地机器上它可以工作,但在我的远程服务器上它引发 UnicodeEncodeError: 'ascii' codec can't encode character '\u2122' in position 0: ordinal not in range(128)

我试过$ PYTHONIOENCODING=utf8没有明显效果。

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
Run Code Online (Sandbox Code Playgroud)

工作了一段时间,然后停止并最终失败 ValueError: underlying buffer has been detached

sys.getdefaultencoding()返回'utf-8', 并sys.stdout.encoding返回'ANSI_X3.4-1968'

我能做什么?我不想编辑第三方库。

Mir*_*ac7 5

来自@ShadowRanger 对我的问题的评论,

PYTHONIOENCODING=utf8除非您使用export它(或在 Python 启动前加上它),否则将无法工作。否则,它是一个局部变量,bash因为它不会在子进程的环境中继承。export PYTHONIOENCODING=utf-8将在bash.

export PYTHONIOENCODING=utf-8 成功了,UTF-8 字符不再引发 UnicodeEncodeError