strip()和strip(string.whitespace)结果不同,尽管文档建议它们应相同

8 投票
1 回答
23908 浏览
提问于 2025-04-17 21:08

我有一个包含一些不换行空格的Unicode字符串,这个字符串的开头和结尾都有这些空格。使用 strip()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

1 个回答

14

根据string.whitespace的文档:

这个字符串包含了所有被认为是空白的ASCII字符。这些字符包括空格、制表符、换行符、回车符、换页符和竖直制表符。

在python3中也是这样,所有非ASCII的常量都被移除了。(在python2中,一些常量可能会受到locale设置的影响)。

因此,行为上的差异非常明显,因为strip()确实会去掉任何unicode空白,而strip(string.whitespace)只会去掉ASCII空格。你的字符串显然包含了非ASCII空格。

撰写回答