我应该在我编写的每个 Python 脚本中包含这个样板代码吗?

hed*_*gie 4 python unicode python-3.x

我的老板让我将以下几行(来自这个答案)放入我编写的 Python 3 脚本中:

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

他说这是为了防止UnicodeEncodeErrors在非 UTF8 语言环境中打印 Unicode 字符。我想知道这是否真的有必要,以及为什么 Python 不会在没有样板代码的情况下正确处理编码/解码。

使 Python 脚本与不同操作系统语言环境兼容的最 Pythonic 方法是什么?这个样板代码到底做了什么?

nav*_*vid 5

此处提供的答案很好地摘录了 Python 邮件列表中关于您的问题的内容。我想没有必要这样做。

Python 中唯一支持的默认编码是:

Python 2.x:ASCII
Python 3.x:UTF-8

如果你改变这些,你就靠自己了,奇怪的事情会开始发生。默认编码不仅会影响 Python 与外界之间的转换,还会影响 8 位字符串与 Unicode 之间的所有内部转换。

像 pango 模块中发生的事情(通过重新加载站点模块将默认编码设置为 'utf-8' 以获取 sys.setdefaultencoding() API)之类的黑客攻击是完全错误的,并且会导致严重的问题,因为 Unicode 对象缓存它们的默认编码表示。

请不要启用基于语言环境的默认编码。

如果您想要实现的只是为管道正确设置 stdout 和 stdin 的编码,则应改为更改那些(仅)的 .encoding 属性。

--
马克-安德烈·伦
堡 eGenix.com