我有一个Python脚本,我希望它能够在Python 3.2和2.7上都能运行,以方便使用。
是否有一种方法可以在两个版本中同时使用Unicode字面值?例如:
#coding: utf-8
whatever = 'שלום'
在Python 2.x中,以上代码需要使用Unicode字符串(u''
)。但在Python 3.x中,这个小的u
会导致语法错误。
我有一个Python脚本,我希望它能够在Python 3.2和2.7上都能运行,以方便使用。
是否有一种方法可以在两个版本中同时使用Unicode字面值?例如:
#coding: utf-8
whatever = 'שלום'
在Python 2.x中,以上代码需要使用Unicode字符串(u''
)。但在Python 3.x中,这个小的u
会导致语法错误。
编辑 - 自从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
u''
,因为它在Python 3.3中得到了支持。 - ubershmekel