我有一个使用python 3运行的脚本,除了字符串文字。 Python 2.x强迫我用字符串文字加上u''和python 3,不了解它。 如何解决?
答案 0 :(得分:1)
在python 2.x中运行时尝试这个:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
[u'xx', u'yy', u'zz', u'aa']
在python 3.x中执行时相同:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
['xx', 'yy', 'zz', 'aa']
答案 1 :(得分:1)
一些选择:
您可以使用以下兼容性功能将所有unicode字符串写为u("a\u0020")
。类似的技巧可以让你在Python 2.5下支持b('')
字节。尽管有额外的函数调用,但是性能有点小。 (这是six 2/3兼容性库使用的内容)。
if sys.version_info < (3,0):
def u(s):
return s.decode("unicode_escape")
else:
def u(s):
return s
其次,如果您不必支持Python 2.5,则可以使用from __future__ import unicode_literals
,该模块的Python 2.6 / 2.7字符串的行为与3.x相同。
最后,如果您不必支持Python 3.0-3.2,则可以使用u''
,因为Python 3.3重新添加了对u''
前缀的支持,因为流行压力(主要来自webframework)开发人员)。
答案 2 :(得分:0)
您使用包装器方法,通常称为u
。
这是我的版本(来自Porting to Python 3,如果你同时支持Python 2和Python 3,你应该阅读。):
import sys
if sys.version < '3':
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
else:
def u(x):
return x
然后使用u('String')代替u'String'。对于非ascii文本,您需要使用\x00
,\u0000
或\N{name}
语法。
Python 3.3将再次支持你的语法,以避免这种情况,但它仍处于测试阶段。
from __future__ import unicode_literas
功能已被证明没什么用处,因为您需要使用包装器来制作本机字符串,这不是一种改进。