如何在python中实现向前兼容的字符串文本?
我有一个脚本,除了字符串文字外,它使用Python3运行。 Python2.x强制我在字符串文本前面加上u'',而Python3不理解它。如何在python中实现向前兼容的字符串文本?,python,string,python-3.x,literals,Python,String,Python 3.x,Literals,我有一个脚本,除了字符串文字外,它使用Python3运行。 Python2.x强制我在字符串文本前面加上u'',而Python3不理解它。 如何解决这个问题?在Python2.x中运行时,请尝试以下方法: >>> from __future__ import unicode_literals >>> s=['xx','yy','zz','aa'] >>> s [u'xx', u'yy', u'zz', u'aa'] 在Python3.x中执
如何解决这个问题?在Python2.x中运行时,请尝试以下方法:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
[u'xx', u'yy', u'zz', u'aa']
在Python3.x中执行时也是这样:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
['xx', 'yy', 'zz', 'aa']
有几个选择:
您可以使用以下兼容函数将所有unicode字符串编写为u(“a\u0020”)
。类似的技巧可以让您在Python 2.5下为字节支持b(“”)
。不过,额外的函数调用对性能有一点影响。(这就是2/3兼容性库使用的内容)
如果系统版本信息<(3,0):
DEFU(s):
返回s.decode(“unicode_转义”)
其他:
DEFU(s):
返回s
其次,如果您不必支持Python2.5,您可以使用来自未来导入unicode文本的,该模块的Python2.6/2.7字符串的行为与3.x相同
最后,如果您不必支持Python 3.0-3.2,您可以使用u'
,因为由于流行的压力(主要来自webframework开发人员),Python 3.3重新添加了对u'
前缀的支持。您使用了一种包装方法,通常称为u
这是我的版本(来自,如果您使用相同的代码同时支持Python 2和Python 3,您应该阅读该版本):
导入系统
如果sys.version<'3':
导入编解码器
DEFU(x):
返回编解码器。unicode_转义_解码(x)[0]
其他:
DEFU(x):
返回x
然后使用u('String')而不是u'String'。对于非ascii文本,您需要使用\x00
、\u0000
或\N{name}
语法
为了避免这种情况,Python3.3将再次支持u''语法,但它仍处于测试阶段
事实证明,
from\uuuuuuu future\uuuuuuuuuu导入unicode\u literas
功能没有什么用处,因为您需要一个包装器来生成本机字符串,这不是一个改进。等待python 3.3,只使用b'
或u'
来表示字符串。否则,您可以使用一些(糟糕的)技巧或2to3
脚本“表示字符串”?你什么意思?这是2.6+的。早期的2.x不支持unicode\u文字@gnibler这让我很满意:),但很高兴知道
if sys.version_info < (3,0):
def u(s):
return s.decode("unicode_escape")
else:
def u(s):
return s
import sys
if sys.version < '3':
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
else:
def u(x):
return x