我正在使用一些Python代码,它使用lxml HTML
解析器来解析一个同事从随机抽取的网站样本中获取的HTML。在
在其中的两个例子中,我得到了一个形式上的错误
"'utf8' codec can't decode byte 0xe20x80 in position 502: unexpected end of data",
而且HTML内容确实包含一个损坏的UTF-8
字符。在
代码中名为ele的变量被分配给包含错误字符的文本的<;p>;元素,可以通过电子文本. 也可以,但仅仅是分配电子文本到另一个变量会引发UnicodeDecodeError
。except子句中可用的UnicodeDecodeError
类型的对象包含一些有用的属性,例如文本中坏字节的开始位置和结束位置,这些属性可以用来创建一个新的字符串,从中删除坏字节,但是可以做任何事情来电子文本,比如取它的一个子串,引发一个新的UnicodeDetectError
。我能做些什么来挽救ele.text
的好部分吗?在
我是凭记忆写的,我不记得代码的所有细节,所以如果有用的话,我明天可以提供更多的信息。我记得的是ele是一个类似lxml._Element
类型的对象,被解析的文件实际上在utf-8
中,文件中有一个地方,其中匹配实体的字符的前两个utf-8
字节后跟实体&rdquo;。所以文本包含"xE2x80&rdquo;"
。错误消息抱怨"xE2x80"
,并给出它们在一个包含520个字符的字符串中的位置。如果需要,我可以丢弃整个字符串,但是我宁愿使用位置信息来丢弃"xE2x80"
。因为某种原因,做任何事电子文本在lxml中导致低级Cython代码出错。我明天上班时可以提供堆栈跟踪。什么,如果我能用那条短信做点什么?谢谢。在
e2 80
字节本身不会导致错误:正如@Esailija在评论中指出的,上面的数据并不解释为utf-8。要强制utf-8编码:
^{pr2}$相关问题 更多 >
编程相关推荐