在这个网站上有几十个,甚至几百个关于使用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? p>
在那里,我以几种不同的方式重复了这个问题,所以它不能被误解 - unicode在我想要做的事情的背景下是垃圾,我想把它转换成无害的东西或者完全删除它。这最容易实现的方法是什么?
答案 0 :(得分:11)
你可以line.decode('ascii', 'ignore')
。这将解码为ASCII的所有内容,忽略任何错误。
但是,如果你这样做,请为疼痛做好准备。 Unicode存在是有原因的。丢弃部分数据甚至不知道你扔掉了什么几乎总会导致问题。它就像在说"我不在乎我的汽车发动机内的一些小玩意儿是否无法工作,我只是想开车。只要拿出任何不起作用的东西!"这一切都很好,直到它爆炸。
答案 1 :(得分:8)
问题不能“消失”,无法正确处理unicode
的代码必须。没有简单的方法可以做到这一点,但最简单的方法是解码输入上的字节,以确保应用程序在任何地方使用文本。
答案 2 :(得分:0)
@BrenBarn建议结果将是虚假的英语单词......
我的建议是为什么不考虑删除包含unicode字符的整个单词
即如果space+characters+space
具有unicode字符,则单词为characters
,然后删除前一空格之后和下一空格之前的所有字符..结果将比仅删除unicode字符好得多。
如果您只想删除名称(@username)和标签(#tags),可以使用过滤器([@,#,..]
)而不是强行搜索所有unicode字符。
我的声誉很低,所以无法发表评论,因此将其作为答案..: - (