Python Unicode处理错误 - 如何简单地删除Unicode

时间:2013-05-18 04:12:41

标签: python unicode

在这个网站上有几十个,甚至几百个关于使用python进行unicode处理错误的问题。以下是我所谈论的一个例子:

  

UnicodeDecodeError:'ascii'编解码器无法解码位置2310中的字节0xe2:序数不在范围内(128)

很多问题表明OP只是想让违规的内容走开。他们收到的回复统一充满了关于编解码器,字符集以及各种不能解决这个基本问题的各种事情:

“我正在尝试处理一个带有一些unicode的文本文件,我不太关心这些东西是什么,它只是在我试图解决的问题的上下文中的噪音。”

所以,我有一个包含大量JSON编码推文的文件,我对这些特殊字符完全没有兴趣,我希望它们从行中删除。

fh = open('file-full-of-unicode.txt')
for line in fh:
   print zap_unicode(line)

给定一个名为'line'的变量,我如何简单地打印它减去它可能包含的任何unicode?

在那里,我以几种不同的方式重复了这个问题,所以它不能被误解 - unicode在我想要做的事情的背景下是垃圾,我想把它转换成无害的东西或者完全删除它。这最容易实现的方法是什么?

3 个答案:

答案 0 :(得分:11)

你可以line.decode('ascii', 'ignore')。这将解码为ASCII的所有内容,忽略任何错误。

但是,如果你这样做,请为疼痛做好准备。 Unicode存在是有原因的。丢弃部分数据甚至不知道你扔掉了什么几乎总会导致问题。它就像在说"我不在乎我的汽车发动机内的一些小玩意儿是否无法工作,我只是想开车。只要拿出任何不起作用的东西!"这一切都很好,直到它爆炸。

答案 1 :(得分:8)

问题不能“消失”,无法正确处理unicode 的代码必须。没有简单的方法可以做到这一点,但最简单的方法是解码输入上的字节,以确保应用程序在任何地方使用文本。

答案 2 :(得分:0)

@BrenBarn建议结果将是虚假的英语单词......

我的建议是为什么不考虑删除包含unicode字符的整个单词 即如果space+characters+space具有unicode字符,则单词为characters,然后删除前一空格之后和下一空格之前的所有字符..结果将比仅删除unicode字符好得多。

如果您只想删除名称(@username)和标签(#tags),可以使用过滤器([@,#,..])而不是强行搜索所有unicode字符。

我的声誉很低,所以无法发表评论,因此将其作为答案..: - (