2016-08-27 22 views
3

我的老板要求我把下面的线(从this answer)转换为Python脚本3我写道:我应该在我写的每个Python脚本中包含这个样板代码吗?

import sys 
import codecs 
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

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

使Python脚本与不同操作系统区域设置兼容的最Python方法是什么?这样的样板代码究竟做了什么?

+2

你读过的最upvoted答案,以“伊克开始那是在Python 2众所周知的成语它看起来像!?对我来说是一个危险的错误。“此外,这是建议python2,甚至问题具体说,它不能在python3中工作!在其他地方,同一个问题的答案指出“ sys.stdout在Python 3中处于文本模式。因此,您直接写入unicode,并且不再需要Python 2的成语。” – GreenAsJade

回答

4

提供的答案here有关于您的问题的Python邮件列表的一个很好的摘录。我想这是没有必要的。

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

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

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

黑客就像发生了什么攀高模块(在为了得到 sys.setdefaultencoding函数()API回重装网站模块设置默认 编码为“UTF-8”)都只是彻头彻尾的错误,将 由于Unicode对象缓存默认的 编码表示,所以会导致严重问题。

请不要启用基于区域设置的默认编码。

如果你想要实现的是正确地得到stdout和标准输入 的编码设置的管道,则应该改变那些(只)的 .encoding属性。

-
马克 - 安德烈·Lemburg
eGenix.com

相关问题