如何去除这个特殊字符?

15

我试图将文件中的行合并,但观察到以下内容:

word1 word2
word1 word2

我不明白为什么这些行没有被合并,于是我在 vim 中打开文件并使用 :set list 命令查看是否有任何特殊字符,我发现了如下内容:

 word1 <feff>word2
 word1 word2

我不确定如何在Python中清洗这个词。有什么建议可以清除哪些字符以及如何清除吗?


2
feff 是“零宽不换行空格”。 - apscience
@gladoscc:哦!谷歌搜索显示它是一个名为BOM字符的字符。我不知道它是从哪里潜入我的文件的! - Legend
2个回答

32

U+FEFF是字节顺序标记字符(BOM),应该只出现在文档的开头。在文档中,应将其视为ZERO WIDTH NON-BREAKING SPACE。如果这会引起问题,您可以像删除其他字符一样将其删除:

>>> s = u'word1 \ufeffword2'
>>> s = s.replace(u'\ufeff', '')
>>> s
u'word1 word2'

(在 Python 3.1 或 3.2 中,去掉字符串前面的 u)


谢谢。这可能听起来很傻,但它给了我这个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) - Legend
@Legend 这是因为您未正确处理非ASCII字符。使用s = sBytes.decode('UTF-8')解码UTF-8字符串。通过包含äΣ的输入测试您的代码! - phihag
1
@Legend:你需要使用编解码器打开文件:lines = codecs.open('file.txt', 'r', 'utf-8'),假设你的文件是以 utf-8 编码的。 - Matt N.
@Legend 另外,如果您不确定字节和字符串之间的区别,您可能需要阅读以下内容:http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html,http://diveintopython3.org/strings.html#byte-arrays,https://dev59.com/OXRB5IYBdhLWcg3wgHWr - phihag
3
实际上,这解决了问题: w = w.replace('\xef\xbb\xbf', '') 谢谢你的指点。 - Legend

1
你尝试过 mytext.split(string.whitespace) 吗?

哦..我的文本是用$分隔的。 - Legend
然后你可以执行 mytext.split('$') - Matt N.
哦,那不是我想表达的 :) 我的意思是我正在使用不同的标记进行分割。使用\xed\xbb\xbf替换解决了我的问题。 - Legend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接