我应该在我编写的每个Python脚本中都包含这个样板代码吗?
我的老板让我在我编写的Python 3脚本中加入以下几行:我应该在我编写的每个Python脚本中都包含这个样板代码吗?,python,python-3.x,unicode,Python,Python 3.x,Unicode,我的老板让我在我编写的Python 3脚本中加入以下几行: import sys import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 他说,这是为了防止在非UTF8地区打印Unicode字符时出现Unicode编码错误。我想知道这是否真的有必要,为什么Python在没有样板代码的情况下不能正确处理编码/解码 让Python脚本与不同的操作系统环境兼容的最具Python风格的方法是什么?这个样板代码
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
他说,这是为了防止在非UTF8地区打印Unicode字符时出现Unicode编码错误。我想知道这是否真的有必要,为什么Python在没有样板代码的情况下不能正确处理编码/解码
让Python脚本与不同的操作系统环境兼容的最具Python风格的方法是什么?这个样板代码到底做了什么?提供的答案从Python邮件列表中很好地摘录了您的问题。我想没有必要这样做
Python中唯一支持的默认编码是:
Python 2.x:ASCIIPython3.x:UTF-8 如果你改变这些,你就只能靠自己了,奇怪的事情就会开始 发生。默认编码不仅影响翻译 Python与外部世界之间,也都是内部世界 8位字符串和Unicode之间的转换 黑客喜欢pango模块中发生的事情(设置默认值 通过重新加载站点模块以获取 sys.setdefaultencoding()API back)是完全错误的,并且将 由于Unicode对象缓存其默认值,导致严重问题 编码表示法 请不要启用基于区域设置的默认编码 如果您只想获得stdout和 stdin正确设置管道时,应改为更改 .encoding属性(仅限) --
马克·安德烈·伦伯格
eGenix.com
您是否阅读了投票最多的答案,以“Eek!这是Python 2中的一个众所周知的习惯用法吗?对我来说,这似乎是一个危险的错误。”此外,这被推荐用于python2,甚至问题明确地说它在python3中不起作用!在其他地方,对同一问题的回答指出,“sys.stdout在Python3中处于文本模式。因此您可以直接向其编写unicode,而Python2的习惯用法不再需要。”