在 python 3 和 2 中工作的 Unicode 文字

Posted

技术标签:

【中文标题】在 python 3 和 2 中工作的 Unicode 文字【英文标题】:Unicode literals that work in python 3 and 2 【发布时间】:2011-10-01 07:58:16 【问题描述】:

所以我有一个 python 脚本,为了方便起见,我更喜欢在 python 3.2 和 2.7 上工作。

有没有办法让 unicode 文字同时适用于两者?例如

#coding: utf-8
whatever = 'שלום'

上面的代码在 python 2.x (u'') 中需要一个 unicode 字符串,而在 python 3.x 中,小的 u 会导致语法错误。

【问题讨论】:

@ubershmekel 您会推荐哪种解决方案?你的还是接受答案的? 我建议使用u'',因为它现在在 python 3.3 中得到支持 【参考方案1】:

在 3.0、3.1 和 3.2 中:

from __future__ import unicode_literals

来源:ubershmekel,在问题中。原文见revision 4。

【讨论】:

【参考方案2】:

编辑 - 自 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\NLatin Small Letter O with diaeresisde'))
Ünicöde

【讨论】:

如果您删除了第二部分,我会接受您的回答,因为它不适用于包含实际未转义 unicode 的 unicode 文字。编辑 - 如果您在答案中澄清细微差别,我会很高兴。 您不传入 unicode 文字,而是传入字符串文字,这就是它的全部意义所在。我试图澄清这一点。 “不需要 u() 函数。”,为了支持仍在使用 Python 3.2 的人,需要它。 “unicode 文字”不是“字符串文字”的类型吗? 在 Python 3 中它们是一样的,在 Python 2 中它们不是。

以上是关于在 python 3 和 2 中工作的 Unicode 文字的主要内容,如果未能解决你的问题,请参考以下文章

Robotframework - 在python中工作的正则表达式不匹配

在 oracle 和 HSQL 中工作的查询

为在同一文件中工作的多个用户寻求设计建议

关于管道如何在 Bash 中工作的简单解释是啥?

在部门的所有项目中工作的员工

在一个部门的所有项目中工作的员工