在python 3和2中工作的Unicode文字

时间:2011-07-08 14:19:35

标签: python python-3.x unicode python-2.x unicode-literals

所以我有一个python脚本,我更喜欢在python 3.2和2.7上使用它只是为了方便。

有没有办法让unicode文字在两者中都有效? E.g。

#coding: utf-8
whatever = 'שלום'

上面的代码需要python 2.x(u'')中的unicode字符串和python 3.x中的小'u'导致语法错误。

无论如何我找到了答案,我所需要的只是:

from __future__ import unicode_literals

由于https://meta.stackexchange.com/questions/49922/should-i-continue-adding-a-question-if-i-have-found-the-answer-myself

,我仍在发帖

对于好奇,这就是我正在做的事情:http://code.google.com/p/pytitle/

2 个答案:

答案 0 :(得分:26)

编辑 - 自Python 3.3起,u''字面值再次起作用,因此不需要u()函数。

最好的选择是创建一个方法,在Python 2中从字符串对象创建unicode对象,但在Python 3中保留字符串对象(因为它们已经是unicode)。

import sys
if sys.version < '3':
    import codecs
    def u(x):
        return codecs.unicode_escape_decode(x)[0]
else:
    def u(x):
        return x

然后你会这样使用它:

>>> print(u('\u00dcnic\u00f6de'))
Ünicöde
>>> print(u('\xdcnic\N{Latin Small Letter O with diaeresis}de'))
Ünicöde

答案 1 :(得分:0)

在3.0、3.1和3.2版本中:

from __future__ import unicode_literals

来源ubershmekel。参见revision 4