使用Python移除字符串中的非断行空格

40 投票
7 回答
62222 浏览
提问于 2025-04-15 21:20

我在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格式,所以你可以通过使用 joinsplit 来去掉字符串 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可用),不过在把内容写入文件或打印到屏幕时,你需要把它再转换回字节(也就是二进制格式)。

撰写回答