使用Python移除字符串中的非断行空格
我在Python中遇到了一些关于字符串的基本问题(我搞不清楚)。简单来说,我想做的是:
'# read file into a string
myString = file.read()
'# Attempt to remove non breaking spaces
myString = myString.replace("\u00A0"," ")
'# however, when I print my string to output to console, I get:
Foo **<C2><A0>** Bar
我以为“\u00A0”是表示不换行空格的unicode转义码,但显然我没有正确使用。你们有什么想法我哪里出错了吗?
7 个回答
7
不,u"\u00A0"
是表示不换行空格的转义代码。"\u00A0"
则是6个字符,并不是任何转义代码。可以看看这个链接。
12
我在给一个老问题添加另一个答案时有点犹豫,但因为在Python3中,Unicode的“非换行空格”字符被视为空白字符,而且字符串默认就是Unicode格式,所以你可以通过使用 join
和 split
来去掉字符串 s
中的非换行空格,方法如下:
s = ' '.join(s.split())
当然,这样做也会改变其他的空白字符(比如制表符、换行符等)。你可以在维基百科的 空白字符 页面找到会被改变的Unicode字符的列表。
请注意,这仅适用于Python3。
57
你现在手里的是一个UTF-8格式的字节列表,而不是一个unicode字符串(在Python 2.x中,字符串就是字节)。
你可以试试
myString = myString.replace("\xc2\xa0", " ")
更好的办法是切换到unicode格式——可以参考这篇文章来获取一些想法。所以你可以这样写
uniString = unicode(myString, "UTF-8")
uniString = uniString.replace(u"\u00A0", " ")
这样也应该能正常工作(注意:我现在没有Python 2.x可用),不过在把内容写入文件或打印到屏幕时,你需要把它再转换回字节(也就是二进制格式)。