Python原始Unicode转义编码

3
我正在阅读Python 2.7的文档,但我不理解Raw-Unicode-Escape encoding。以下是原始文档:
对于专家来说,也有一种与普通字符串相同的原始模式。您必须在开头引号前加上“ur”,以便Python使用Raw-Unicode-Escape编码。它仅会在小写“u”的前面有奇数个反斜杠时应用上述\uXXXX转换。
我想知道为什么需要的反斜杠数量是奇数。这只是一个规则还是由于其他原因?
1个回答

2

\uXXXX转义在原始字符串中会被特殊处理,正如您引用的文本所描述的那样。ur'\\\\'是包含四个反斜杠的字符串,而ur'\\\u0020\\'则是四个反斜杠和一个空格。如果我不得不猜测为什么必须有一个不均匀数量的反斜杠才能识别\u,我想猜测这是因为非原始字符串解析器也是这样工作的(我没有查看源代码以确定)。
关于为什么的问题,对于 Python 2 来说,可能归结为“因为它是这样定义的”。Python 3 不再这样做了 - r'\\\u0020\\''\\\\\\u0020\\\\'相同。


那么 ur'Hello\u0020World !'u'Hello\u0020World !' 有什么区别呢? - Chaos
什么都没有 - 试一下! - cco
为什么在原始字符串中反斜杠转义仍然生效? - Chaos
2
@Chaos "因为它是这样定义的"。请注意,Python 3不是这样工作的,因此可以将其视为已删除的瑕疵。 - Mark Tolonen
@Mark-Tolonen - 谢谢,你是正确的;我还没有检查过Py3。 - cco
@MarkTolonen 谢谢,如果我们需要表示字符串字面值 \\,我们应该使用 '\\\',而不是 r'\',因为后者会导致语法错误。 - Chaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接