Ruby Nokogiri获取的Html编码错误

Ruby Nokogiri获取的Html编码错误,ruby,nokogiri,Ruby,Nokogiri,我使用Nokogiri解析html。我需要页面中的内容和图像标签,因此我使用internal\uhtml而不是content方法。但是content返回的值被正确编码,而internal\u html错误编码。请注意,该页面为中文,未使用UTF-8编码 这是我的密码: # encoding: utf-8 require 'rubygems' require 'nokogiri' require 'open-uri' require 'iconv' doc = Nokogiri::HTML.pa

我使用Nokogiri解析html。我需要页面中的内容和图像标签,因此我使用
internal\uhtml
而不是
content
方法。但是
content
返回的值被正确编码,而
internal\u html
错误编码。请注意,该页面为中文,未使用UTF-8编码

这是我的密码:

# encoding: utf-8
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'iconv'

doc = Nokogiri::HTML.parse(open("http://www.sfzt.org/advise/view.asp?id=536"), nil, 'gb18030')

doc.css('td.font_info').each do |link|
  # output, correct but not i expect: 目前市面上影响比
  puts link.content

  # output, wrong and not i expect: <img ....></img>Ŀǰ??????Ӱ??Ƚϴ?Ľ????
  # I expect: <img ....></img>目前市面上影响比
  puts link.inner_html
end
编码:utf-8 需要“rubygems” 需要“nokogiri” 需要“打开uri” 需要“iconv” doc=Nokogiri::HTML.parse(打开http://www.sfzt.org/advise/view.asp?id=536)、无、‘gb18030’) doc.css('td.font_info')。每个do |链接| #输出,正确,但不是我期望的:目前市面上影响比 放置link.content #输出,错误且不是我期望的:ĿǰӰȽϴĽ???? #我期望:目前市面上影响比 放置link.inner\u html 结束
我认为内容可以很好地去除标记,但是内部的html方法节点不能很好地或根本不能做到这一点

“我认为,如果在遍历时更改内部的_html(包含标记),可能会出现一些非常奇怪的状态。换句话说,如果正在遍历节点树,则不应执行任何可能添加或删除节点的操作。”

试试这个:

doc.css('td.font_info').each do |link|
  puts link.content
  some_stuff = link.inner_html
  link.children = Nokogiri::HTML.fragment(some_stuff, 'utf-8')
end

我认为内容可以很好地去除标记,但是内部的html方法节点做得不是很好,或者根本做不到

“我认为,如果在遍历时更改内部的_html(包含标记),可能会出现一些非常奇怪的状态。换句话说,如果正在遍历节点树,则不应执行任何可能添加或删除节点的操作。”

试试这个:

doc.css('td.font_info').each do |link|
  puts link.content
  some_stuff = link.inner_html
  link.children = Nokogiri::HTML.fragment(some_stuff, 'utf-8')
end

这写在自述文件的“编码”部分:

字符串在内部始终存储为UTF-8。返回的方法 文本值将始终返回UTF-8编码的字符串。方法 returnxml(如to_XML、to_html和inner_html)将返回一个字符串 编码方式与源文档类似

因此,如果希望将其转换为UTF-8字符串,则应手动转换
内部html
字符串:

puts link.inner_html.encode('utf-8') # for 1.9.x

这写在自述文件的“编码”部分:

字符串在内部始终存储为UTF-8。返回的方法 文本值将始终返回UTF-8编码的字符串。方法 returnxml(如to_XML、to_html和inner_html)将返回一个字符串 编码方式与源文档类似

因此,如果希望将其转换为UTF-8字符串,则应手动转换
内部html
字符串:

puts link.inner_html.encode('utf-8') # for 1.9.x

您可能想澄清这是如何解决这个问题的。@Hishalv谢谢。尝试了你的代码,输出仍然是错误的编码。我想知道我是否需要手动进行一些编码转换。您可能想澄清这是如何解决这个问题的。@hisalv谢谢。尝试了你的代码,输出仍然是错误的编码。我想知道是否需要手动进行编码转换。您使用的是什么版本的Ruby?什么版本的Nokogiri?你的期望是什么?当我在Ruby 1.9下运行上述代码时,我会得到一个UTF-8编码的字符串,以“目前市面上影响比较大的讲述《论语".@Phrogz我使用Ruby 1.9.2;如果我使用
link.content
,那是正确的(正如您上面提到的).但除了纯文本,我还想从页面中获取html标记,如img。但这次,它不是UTF-8编码的。它会输出类似于
的内容,如
的内容,如\1264;Ƚϴ的内容。请更新您的问题,准确显示如何重现和验证问题,以及您的期望或愿望。我已经更新了我的问题打开。谢谢。你使用的是什么版本的Ruby?什么版本的Nokogiri?你的期望是什么?当我在Ruby 1.9下运行上述代码时,我得到一个UTF-8编码的字符串,以“目前市面上影响比较大的讲述《论语“@Phrogz我使用Ruby 1.9.2;如果我使用
link.content
,那是正确的(正如您上面提到的).但除了纯文本,我还想从页面中获取html标记,如img。但这次,它不是UTF-8编码的。它会输出类似于
的内容,如
的内容,如\1264;Ƚϴ的内容。请更新您的问题,准确显示如何重现和验证问题,以及您的期望或愿望。我已经更新了我的问题别客气,谢谢。