【问题标题】:How to remove this special character?如何删除这个特殊字符?
【发布时间】:2011-10-10 19:48:34
【问题描述】:

当我观察到以下情况时,我试图统一文件中的行:

word1word2
word1 word2

我不明白为什么这些行没有合并,所以我在vim中打开文件并使用:set list查看是否有任何特殊字符,我发现了这个:

 word1 <feff>word2
 word1 word2

我不确定如何在 Python 中清除这个词。关于可能是什么字符以及如何清理它的任何建议?

【问题讨论】:

  • feff 是“零宽度无间断空间”。
  • @gladoscc:哦!谷歌搜索显示它是一个名为 BOM 字符的字符。我不知道它是从哪里爬到我的文件中的!

标签: python string


【解决方案1】:

U+FEFF 是Byte Order Mark 字符,它应该只出现在文档的开头。在文档中,it should be treated as a 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 那是因为您错误地处理了非 ASCII 字符。使用 s = sBytes.decode('UTF-8') 解码 UTF-8 字符串。使用包含 äΣ 的输入测试您的代码!
  • @Legend:你必须使用编解码器打开你的文件:lines = codecs.open('file.txt', 'r', 'utf-8'),假设你的文件是 utf-8 格式。
  • @Legend 在相关说明中,如果您不确定字节和字符串之间的区别,您可能需要readupon
  • 其实这样就解决了问题:w = w.replace('\xef\xbb\xbf', '')谢谢指点。
【解决方案2】:

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

【讨论】:

  • 哦..我的文字用$分隔
  • 那你就可以mytext.split('$').
  • 哦,这不是我的意思 :) 我的意思是我使用不同的令牌拆分它。替换为\xed\xbb\xbf 解决了我的问题。
猜你喜欢
  • 2010-10-14
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多