这个问题,我意识到我对原始字符串了解不多。对于声称自己是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对象需要更多的内存空间(显然,对于非常短的字符串而言,差异很小;-)。

来自: stackoverflow.com