尽管文档表明它们应该相同,但strip()和strip(string.whitespace)给出了不同的结果


问题内容

我有一个Unicode字符串,在开头和结尾都有一些不间断的空格。使用strip()vs时得到不同的结果strip(string.whitespace)

>>> import string
>>> s5 = u'\xa0\xa0hello\xa0\xa0'
>>> print s5.strip()
hello
>>> print s5.strip(string.whitespace)
  hello

的文档strip()说:“如果省略或None,则该chars参数默认为删除空格。”
的文档string.whitespace说:“包含所有被视为空格的字符的字符串。”

因此,如果string.whitespace包含所有被认为是空格的字符,那么结果为何不同?它与Unicode有关吗?

我正在使用Python 2.7.6


问题答案:

从文档string.whitespace

一个字符串,其中包含所有被视为空格的 ASCII字符 。这包括字符空格,制表符,换行符,返回符,换页符和垂直制表符。

在python3下是相同的,其中所有非ASCII常量均已删除。(在python2中,某些常量可能会受到locale设置的影响)。

因此,行为上的差异非常明显,因为strip() 它确实 删除了任何 unicode
空格,而strip(string.whitespace)只删除了ASCII空间。您的字符串显然包含非ASCII空格。