问这个问题,我意识到我对原始字符串了解不多。对于声称自己是Django培训师的人来说,这很糟糕。
我知道什么是编码,我知道什么u''
一个人这样做,因为我得到了Unicode。
但是有什么
r''
到底做?它会导致什么样的字符串?最重要的是,赫克做什么
ur''
做?最后,有什么可靠的方法可以从Unicode字符串回到简单的原始字符串?
啊,顺便说一句,如果您的系统和文本编辑器Charset设置为UTF-8,
u''
实际做什么?
答案
真的没有任何"原始"细绳 “;有原始字符串文字 ,这正是字符串文字'r'
开场报价之前。
“原始字符串文字"是字符串字面的略有不同的语法,其中后斜切,\
,被视为含义"只是一个后斜线”(除非它是在终止字面终止的报价之前出现的) - 没有"逃生序列"来表示新线,选项卡,背面,式喂食等。在正常的字符串文字中,必须将每个后斜线加倍,以免被视为逃生序列的开始。
该语法变体的存在主要是因为正则表达模式的语法很重,但却不是最后,因此上面的"除"条款并不重要),当您避免将每个人加倍时,它看起来会好一些 - - 就这样。表达本机Windows文件路径(带有后斜线而不是像其他平台上的常规斜线)也获得了一些普遍性,但这很少需要(因为正常斜线在Windows上也很奏效)和不完美(由于” Axk the"多于)。
r'...'
是一个字节字符串(在Python 2中。*),ur'...'
是一个Unicode字符串(再次,在Python 2中,*),其他三种引用中的任何一种也会产生完全相同的字符串(例如r'...'
,,,,r'''...'''
,,,,r"..."
,,,,r"""..."""
都是字节字符串,依此类推)。
不确定您的意思是"去后退 " - 没有内在的后向方向,因为没有原始字符串type,这只是一种替代语法,可以表达出完全普通的字符串对象,字节或Unicode。
是的,在Python 2中。*,u'...'
is 当然总是不同于'...'
- 前者是一个Unicode字符串,后者是一个字节字符串。编码文字的内容可能在一个完全正交的问题中表达。
例如,考虑(Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
当然,Unicode对象需要更多的内存空间(显然,对于非常短的字符串而言,差异很小;-)。