在问 这个问题 时,我意识到我对原始字符串知之甚少。对于自称是 Django 培训师的人来说,这很糟糕。
我知道编码是什么,而且我知道 u''
是什么,因为我知道什么是 Unicode。
但是
r''
究竟做了什么?它会产生什么样的字符串?最重要的是,
ur''
到底是做什么的?最后,是否有任何可靠的方法可以从 Unicode 字符串返回到简单的原始字符串?
啊,顺便说一下,如果您的系统和文本编辑器字符集设置为 UTF-8,那么
u''
真的有什么作用吗?
原文由 e-satis 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有真正的“原始 _字符串_”;有 raw string literals ,它们正是在开始引号之前用
'r'
标记的字符串文字。“原始字符串文字”是字符串文字的一种略有不同的语法,其中反斜杠
\
被视为“只是一个反斜杠”(除非它恰好出现在引号之前终止文字)——没有“转义序列”来表示换行符、制表符、退格符、换页符等。在普通的字符串文字中,每个反斜杠必须加倍以避免被视为转义序列的开头。这种语法变体的存在主要是因为正则表达式模式的语法中有很多反斜杠(但从不在末尾,所以上面的“except”子句无关紧要)并且当你避免将它们中的每一个加倍时它看起来会好一点 - - 就这样。表示本机 Windows 文件路径(使用反斜杠而不是其他平台上的常规斜杠)也很受欢迎,但这很少需要(因为普通斜杠在 Windows 上也能很好地工作)并且不完美(由于“except”子句多于)。
r'...'
是一个字节字符串(在 Python 2.* 中),ur'...'
是一个 Unicode 字符串(同样,在 Python 2.* 中),其他三种引用中的任何一种也是produces exactly the same types of strings (so for exampler'...'
,r'''...'''
,r"..."
,r"""..."""
are all byte strings, and so on ).不确定“ _返回_”是什么意思 - 本质上没有前后方向,因为没有原始字符串 类型,它只是表达完全正常的字符串对象、字节或 unicode 的另一种语法。
是的,在 Python 2.* 中,
u'...'
当然 总是 不同于'...'
前者是一个 unicode 字符串,后者是一个字节字符串。文字可能用什么编码来表达是一个完全正交的问题。例如,考虑(Python 2.6):
Unicode 对象当然需要更多的内存空间(对于很短的字符串来说差别很小,很明显 ;-)。