我正在python中编写一个脚本,生成包含utf-8字符的输出,即使大多数linux终端默认使用utf-8,我也在编写代码,假设它不在utf-8中(如果用户因某种原因改变了它。
根据我的测试,os.environ["LANG"] = "en_US.utf-8"
不会更改系统环境变量,只会改变Python内部的数据结构。
答案 0 :(得分:1)
我认为你过度了。 Python附带电池;只是使用它们。
正确配置的终端会话设置了LANG
环境变量;它描述了终端期望哪个编码作为此会话中运行的程序的输出。
Python解释器检测到此设置并根据它设置sys.stdout.encoding
。然后,它使用该编码将任何 Unicode 输出编码为正确的字节序列。 (如果你要发送一个字节序列,你就可以自己做了,并且可能知道你在做什么;也许你正在发送一个二进制流,而不是文本。)
因此,如果您将文本输出为Unicode,则必须自动正确显示,前提是所有字符都可以编码。
如果需要更精细的控制,请选择输出编码,使用自己的错误处理进行编码,然后输出字节。
您在更改终端会话设置的业务中不,除非您专门为此编写工具。用户已配置会话;你的程序必须适应这种配置,而不是改变它,如果它是一个表现良好的程序。
答案 1 :(得分:0)
当您更改LANG环境时,您不清楚您想要看到的内容。如果要使用其他字符编码测试 Python 代码,则需要在启动Python代码之前设置LANG,因为我相信在Python首次启动时会读取LANG。
可能(?)是一个函数调用,可以在Python启动后调用它来更改LANG,但是如果这是出于测试目的,我建议在运行Python代码之前设置它。
然而,更好的方法是更改终端程序中的LANG。这样它就具有正确的编码。虽然几乎每个人都应该使用UTF8,但我不确定你是否需要再测试非UTF8。