当问这个问题时 ,我意识到我对原始字符串不了解很多。 对于自称是Django培训师的人来说,这很糟糕。
我知道编码是什么,我知道什么是u''
本身并因为我得到的是Unicode的。
但是
r''
到底是做什么的? 它产生什么样的字符串?最重要的是,这到底是什么
ur''
吗?最后,有什么可靠的方法可以从Unicode字符串返回到简单的原始字符串?
啊,顺便说一句,如果你的系统和你的文本编辑器的字符集设置为UTF-8,并
u''
实际上做什么?
#1楼
“ u”前缀表示该值具有unicode
类型而不是str
类型。
带有“ r”前缀的原始字符串文字会转义其中的任何转义序列,因此len(r"\\n")
为2。由于它们转义了转义序列,因此您不能在字符串文字后加上单个反斜杠:这不是有效的转义序列(例如r"\\"
)。
“原始”不是该类型的一部分,它只是表示值的一种方式。 例如, "\\\\n"
和r"\\n"
是相同的值,就像32
, 0x20
,和0b100000
是相同的。
您可以使用unicode原始字符串文字:
>>> u = ur"\n"
>>> print type(u), len(u)
<type 'unicode'> 2
源文件编码仅决定如何解释源文件,否则不会影响表达式或类型。 但是, 建议避免使用非ASCII编码会改变含义的代码:
使用ASCII的文件(对于Python 3.0,则为UTF-8)应该没有编码cookie。 只有在注释或文档字符串需要提及需要使用Latin-1的作者姓名时,才应使用Latin-1(或UTF-8)。 否则,使用\\ x,\\ u或\\ U转义是在字符串文字中包含非ASCII数据的首选方法。