Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中实现向前兼容的字符串文本?_Python_String_Python 3.x_Literals - Fatal编程技术网

如何在python中实现向前兼容的字符串文本?

如何在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中执

我有一个脚本,除了字符串文字外,它使用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中执行时也是这样:

>>> 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