-4

这个网站上有几十个,甚至上百个关于 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 在我正在尝试做的事情的上下文中是垃圾,我想将它转换为无害的东西或完全删除它。这如何最容易完成?

4

3 回答 3

12

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

但是,如果您这样做,请为疼痛做好准备。Unicode 的存在是有原因的。在不知道要丢弃什么的情况下丢弃部分数据几乎总是会导致问题。这就像在说“我不在乎我的汽车引擎里的一些小玩意儿是不是坏了,我只是想开它。只要把任何不工作的东西都拿出来!” 这一切都很好,直到它爆炸。

于 2013-05-18T04:20:14.013 回答
8

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

于 2013-05-18T04:15:04.323 回答
0

正如@BrenBarn 建议的那样,结果将是虚假的英文单词......

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

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

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

于 2013-05-18T06:29:58.887 回答