1

我有一个使用 python 3 运行的脚本,除了字符串文字。Python 2.x 强制我用 u'' 作为字符串文字的前缀,而 python 3 不理解它。怎么解决呢?

4

3 回答 3

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']
于 2012-08-25T12:09:25.977 回答
1

几个选项:

您可以u("a\u0020")使用以下兼容性函数将所有 unicode 字符串编写为 。一个类似的技巧可以让你b('')在 Python 2.5 下支持字节。不过,额外的函数调用会对性能造成很小的影响。(这是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,您可以使用,因为 Python 3.3出于普遍压力(主要来自 web 框架开发人员)u''重新添加了对前缀的支持。u''

于 2012-08-25T13:31:18.480 回答
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 将再次支持 u'' 语法,以避免这种情况,但它仍处于测试阶段。

from __future__ import unicode_literas功能已被证明几乎没有用,因为您需要使用包装器来制作本机字符串,这不是一种改进。

于 2012-08-25T13:33:03.707 回答