strip()和strip(string.whitespace)结果不同,尽管文档建议它们应相同
我有一个包含一些不换行空格的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空格。