ruby 1.9:UTF-8中的无效字节序列

我正在用Ruby(1.9)编写一个爬虫,该爬虫使用了来自许多随机站点的大量HTML。
尝试提取链接时,我决定只使用.scan(/href="(.*?)"/i)nokogiri / hpricot(主要是提高速度)。问题是我现在收到很多“ invalid byte sequence in UTF-8”错误。
据我了解,该net/http库没有任何特定于编码的选项,并且进来的东西基本上没有正确标记。
实际使用该传入数据的最佳方法是什么?我尝试.encode设置了replace和invalid选项,但到目前为止没有成功...

扬帆大鱼
浏览 695回答 4
4回答

蓝山帝景

我建议您使用HTML解析器。只要找到最快的一个。解析HTML并不像看起来那样容易。浏览器会在UTF-8 HTML文档中解析无效的UTF-8序列,只需将“ ...”符号放入即可。因此,一旦解析了HTML中的无效UTF-8序列,生成的文本便是有效字符串。即使在属性值内部,您也必须解码amp等HTML实体这是一个很好的问题,总结了为什么不能可靠地使用正则表达式解析HTML: RegEx匹配除XHTML自包含标签之外的其他打开标签

慕的地6264312

attachment = file.readbegin   # Try it as UTF-8 directly   cleaned = attachment.dup.force_encoding('UTF-8')   unless cleaned.valid_encoding?     # Some of it might be old Windows code page     cleaned = attachment.encode( 'UTF-8', 'Windows-1252' )   end   attachment = cleaned rescue EncodingError   # Force it to UTF-8, throwing out invalid bits   attachment = attachment.force_encoding("ISO-8859-1").encode("utf-8", replace: nil) end
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby