Ruby,Nokogiri:如何确保在Nokogiri解析、erb模板和编码HTML文件的整个过程中使用UTF8
我终于设法解析了一个网站的部分内容:Ruby,Nokogiri:如何确保在Nokogiri解析、erb模板和编码HTML文件的整个过程中使用UTF8,html,ruby,parsing,utf-8,nokogiri,Html,Ruby,Parsing,Utf 8,Nokogiri,我终于设法解析了一个网站的部分内容: get '/' do url = '<website>' data = Nokogiri::HTML(open(url)) @rows = data.css("td[valign=top] table tr") erb :muster end get'/'do url=“” data=Nokogiri::HTML(打开(url)) @rows=data.css(“td[valign=top]table tr”) 雇员再培训局:
get '/' do
url = '<website>'
data = Nokogiri::HTML(open(url))
@rows = data.css("td[valign=top] table tr")
erb :muster
end
get'/'do
url=“”
data=Nokogiri::HTML(打开(url))
@rows=data.css(“td[valign=top]table tr”)
雇员再培训局:集合
结束
现在我正试图从我的观点中提取一条线。因此,我在HTML代码中加入:
<%= @rows[2] %>
它实际上返回代码,但UTF8有问题:
<td class="class_name"> </td>
而是说
<td class="class_name">�</td>
�
如何在nokogiri解析、erb和HTML生成期间确保UTF8 见:
在您的案例中,文档声明它使用iso8859编码:
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
也许你正在访问的网站不是UTF-8,URL是什么?更新了我的答案,展示了如何强制nokogiri使用UTF-8如果你在做一个片段,你可以只做
nokogiri::HTML::DocumentFragment.parse(HTML,Encoding::UTF_8.to_s)
这似乎还不够,似乎nokogiri没有按预期处理它。我使用以下内容来提供我需要的保护“doc=Nokogiri::HTML(email.try(:force_编码,'ISO-8859-1')。try(:encode,'UTF-8')。to_)”.doc.text可以任意工作,但doc.text.match(/string/)不能,除非添加额外的force_编码。
data = Nokogiri::HTML(open(url), nil, Encoding::UTF_8.to_s)