【问题标题】:Ruby, Nokogiri: how do i ensure UTF8 throughout nokogiri parsing, erb template, and encoding HTML fileRuby,Nokogiri:我如何在 nokogiri 解析、erb 模板和编码 HTML 文件中确保 UTF8
【发布时间】:2015-01-31 16:37:04
【问题描述】:

我终于设法解析了网站的某些部分:

get '/' do
  url = '<website>'
  data = Nokogiri::HTML(open(url))
  @rows = data.css("td[valign=top] table tr") 
  erb :muster
end

现在我试图在我的视图中提取某行。因此我输入了我的 HTML 代码:

<%= @rows[2] %> 

而且它实际上返回了代码,但是它与UTF8有问题:

<td class="class_name">&nbsp;</td>

而是说

<td class="class_name">�</td>

如何在 nokogiri 解析、erb 和 HTML 生成期间确保 UTF8?

【问题讨论】:

    标签: html ruby parsing utf-8 nokogiri


    【解决方案1】:

    见:http://www.nokogiri.org/tutorials/parsing_an_html_xml_document.html#encoding

    在您的情况下,文档声明它是使用 iso8859 编码的:

    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
    

    您可以执行以下操作来强制 Nokogiri 将流视为 UTF-8:

    data = Nokogiri::HTML(open(url), nil, Encoding::UTF_8.to_s)
    

    【讨论】:

    • 可能您访问的网站不是 UTF-8,网址是什么?
    • 更新了我的答案以显示如何强制 nokogiri 使用 UTF-8
    • 如果你在做一个片段,你可以做Nokogiri::HTML::DocumentFragment.parse(html, Encoding::UTF_8.to_s)
    • 这似乎还不够,似乎 Nokogiri 没有按预期处理它。我使用以下内容来提供我需要的保护“doc = Nokogiri::HTML(email.try(:force_encoding,'ISO-8859-1').try(:encode,'UTF-8').to_s)”。
    • doc.text 可以使用任何一种方式,但 doc.text.match(/string/) 不能,除非您添加额外的 force_encoding。
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2014-07-05
    • 2014-09-15
    • 2014-05-28
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多