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 方法是什么?这个样板代码到底做了什么?
此处提供的答案很好地摘录了 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
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |