Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
在Python2和Python3中有效的原始unicode文本?_Python_Python 3.x_Unicode_Python 2.x - Fatal编程技术网

在Python2和Python3中有效的原始unicode文本?

在Python2和Python3中有效的原始unicode文本?,python,python-3.x,unicode,python-2.x,Python,Python 3.x,Unicode,Python 2.x,显然,Python3中已禁用了ur”“语法。然而,我需要它!“为什么?”,你可能会问。嗯,我需要u前缀,因为它是一个unicode字符串,我的代码需要在Python 2上运行。至于r前缀,也许它不是必需的,但是我使用的标记格式需要很多反斜杠,这将有助于避免错误 下面是一个示例,它在Python 2中实现了我想要的功能,但在Python 3中是非法的: tamil_letter_ma = u"\u0bae" marked_text = ur"\a%s\bthe Tamil\cletter\dMa\

显然,Python3中已禁用了
ur”“
语法。然而,我需要它!“为什么?”,你可能会问。嗯,我需要
u
前缀,因为它是一个unicode字符串,我的代码需要在Python 2上运行。至于
r
前缀,也许它不是必需的,但是我使用的标记格式需要很多反斜杠,这将有助于避免错误

下面是一个示例,它在Python 2中实现了我想要的功能,但在Python 3中是非法的:

tamil_letter_ma = u"\u0bae"
marked_text = ur"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma
在遇到这个问题后,我发现并注意到这句话:

很容易克服这个限制

有人愿意提供一个关于如何做的想法吗


相关:

Unicode字符串是Python3.x中的默认字符串,因此单独使用
r
将产生与Python2中的
ur
相同的结果。

为什么不直接使用原始字符串文本(
r'..
),不需要指定
u
,因为在Python3中,字符串是Unicode字符串

>>> tamil_letter_ma = "\u0bae"
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma
>>> marked_text
'\\aம\\bthe Tamil\\cletter\\dMa\\e'
要使其在Python2.x中也能工作,请在源代码的最开始添加,以便源代码中的所有字符串文字都变成unicode

from __future__ import unicode_literals

首选的方法是删除
u''
前缀并使用
from\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuUnicode\u文本作为输入。但在您的特定情况下,您可能会滥用以下事实:
“仅ascii字符串”%unicode
返回unicode:

>>> tamil_letter_ma = u"\u0bae"
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma
>>> marked_text
u'\\a\u0bae\\bthe Tamil\\cletter\\dMa\\e'

-1; 这忽略了问题的重点,即如何编写在Python 2和Python 3中同时有效的原始unicode文本。有趣的是,这会迫使所有字符串文本成为unicode字符串。这可能不切实际,恢复到转义所有内容以使Python 3版本正常工作可能是最好的解决方案。根据,关于Unicode转义有一个警告:
在Python2中使用from _; future _; import Unicode 0文本时,名义上的“raw”Unicode字符串文本将处理\uxxx和\uxxxxx转义序列,就像用“原始Unicode”前缀显式标记的Python 2字符串一样