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

时间:2014-03-06 16:20:26

标签: python unicode whitespace strip

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

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

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

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

我正在使用Python 2.7.6

1 个答案:

答案 0 :(得分:10)

来自string.whitespace的文档:

  

包含所有 ASCII字符的字符串   空白。这包括字符空间,制表符,换行符,返回,   formfeed和垂直标签。

在python3下也是如此,其中删除了所有非ASCII常量。 (在python2中,某些常量可能受locale设置的影响。)

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