如何在Python脚本中更改环境变量LANG?

时间:2017-03-05 01:22:11

标签: python linux encoding utf-8

我正在python中编写一个脚本,生成包含utf-8字符的输出,即使大多数linux终端默认使用utf-8,我也在编写代码,假设它不在utf-8中(如果用户因某种原因改变了它。

根据我的测试,os.environ["LANG"] = "en_US.utf-8"不会更改系统环境变量,只会改变Python内部的数据结构。

2 个答案:

答案 0 :(得分:1)

我认为你过度了。 Python附带电池;只是使用它们。

正确配置的终端会话设置了LANG环境变量;它描述了终端期望哪个编码作为此会话中运行的程序的输出。

Python解释器检测到此设置并根据它设置sys.stdout.encoding。然后,它使用该编码将任何 Unicode 输出编码为正确的字节序列。 (如果你要发送一个字节序列,你就可以自己做了,并且可能知道你在做什么;也许你正在发送一个二进制流,而不是文本。)

因此,如果您将文本输出为Unicode,则必须自动正确显示,前提是所有字符都可以编码。

如果需要更精细的控制,请选择输出编码,使用自己的错误处理进行编码,然后输出字节。

您在更改终端会话设置的业务中,除非您专门为此编写工具。用户已配置会话;你的程序必须适应这种配置,而不是改变它,如果它是一个表现良好的程序。

答案 1 :(得分:0)

当您更改LANG环境时,您不清楚您想要看到的内容。如果要使用其他字符编码测试 Python 代码,则需要在启动Python代码之前设置LANG,因为我相信在Python首次启动时会读取LANG。

可能(?)是一个函数调用,可以在Python启动后调用它来更改LANG,但是如果这是出于测试目的,我建议在运行Python代码之前设置它。

然而,更好的方法是更改​​终端程序中的LANG。这样它就具有正确的编码。虽然几乎每个人都应该使用UTF8,但我不确定你是否需要再测试非UTF8。