Python Unicode错误,同步开发环境和生产

前端之家收集整理的这篇文章主要介绍了Python Unicode错误,同步开发环境和生产前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我刚刚遇到一个正在运行的应用程序的一些unicode错误,每次都要处理非常奇怪的字符串,最近,

Pınar Karsıyaka

在我的开发环境中(Aptana w.PyDev on Mavericks Mac上有一个最新的自制软件安装),处理这个字符串不会产生错误,并打印到控制台

P\u0131nar Kars\u0131yaka v Torku Selcuk

但是在生产环境中,标准的Ubuntu和Python安装在Amazon EC2小盒子上,打印得像

P\xc4\xb1nar Kars\xc4\xb1yaka v Torku Selcuk

并给出一个可怕的Python错误,

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0131' in position 50: ordinal not in range(128)

我想知道如何(如果可能的话)使prod环境能够处理这些字符,比如我的开发环境可以,但也希望能够改变我的开发环境,像prod一样打破,所以我可以处理代码中发生这种情况的事件.

感谢您对此提供任何帮助.

Mac Python –
 Python 2.7.5(默认,2013年11月1日,18:38:34)
 [dclwin上的[GCC 4.2.1兼容的Apple LLVM 5.0(clang-500.2.79)]

Ubuntu Python –
 Python 2.7.3(默认,2013年4月10日,06:20:15)
 linux2上的[GCC 4.6.3]

最佳答案
如果你在python源的2.7分支中稍微潜水一下,你会发现default encoding of unicode strings首先是set to some forced value(现在,它是“ascii”,虽然它之前是“utf-8”),但它是overridden by the site module在解释器的每个实例化期间.

要检查每个平台上的行为,请运行:

$python -c 'import sys; print(sys.getdefaultencoding())'

现在,如果你想让它们均匀,那就不是很简单,因为它的功能
‘setdefaultencoding’是deleted in the site module,所以你必须这样做
重新加载sys模块以获取它:

$python -c 'import sys; reload(sys); sys.setdefaultencoding("utf-8"); print(sys.getdefaultencoding())'

这样,无论语言环境如何,您都可以在解释器中的每个平台上使用相同的编码
从os到python构建的多个级别定义的编码.

原文链接:https://www.f2er.com/python/439745.html

猜你在找的Python相关文章