2015-10-08 58 views
5

显然ur""语法已在Python 3中禁用。但是,我需要它! “为什么?”你可能会问,。那么,我需要u前缀,因为它是一个unicode字符串,我的代码需要在Python 2上工作。至于r前缀,可能它不是必需的,但我使用的标记格式需要大量反斜杠,它会帮助避免错误。在Python 2和Python 3中有效的原始unicode文字?

下面是一个例子,做什么,我想在Python 2,但在Python 3合法的:

tamil_letter_ma = u"\u0bae" 
marked_text = ur"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 

过这样的问题来了之后,我发现http://bugs.python.org/issue15096,并注意到这句话:

克服限制很容易。

有人会关心如何提供一个想法吗?

相关:What exactly do "u" and "r" string flags do in Python, and what are raw string literals?

回答

9

你为什么不只是使用原始字符串文字(r'....'),您不需要指定u,因为在Python 3中,字符串是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' 

要使它在Python 2.x的也行,在你的源代码的开头添加the following Future import statement,所以,在字符串文字在源代码中的Unicode变。

from __future__ import unicode_literals 
-1

Unicode字符串在Python 3.x的默认,因此使用r单独将产生相同的ur在Python 2

+0

-1;这忽略了问题的关键,即如何编写在Python * 2和Python 3中同时有效的原始unicode文字。 –

1

的首选方法是下降u''前缀,并使用作为from __future__ import unicode_literals@falsetru suggested。但是,在特定情况下,你可能滥用的事实,"ascii-only string" % 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

关于Python3:所有字符串都是以Unicode编码默认。 u前缀已失去其功能,并已从该语言中删除。

但是,从版本3.3开始,u被再次接受(并且被忽略),只是为了使从Python2移植更容易。

所以一种使你的字符串与Python3和Python2兼容的方法是要求3年前发布的3.3+版本。

+0

-1;这个问题是关于'ur'前缀的字符串,不仅仅是'u'前缀的字符串,并且'Python'不支持Python 3.3+。 –

+0

@MarkAmery:感谢您的评论,并感谢您提供无用的答案。 – VPfB