`

Nokogiri 中文乱码的几种情况

阅读更多
更新2011/11/15
有些不是IE上的了

如果不确定目标是什么编码,Ruby1.9开始可以用String类内置的encoding来得到编码。
	puts Iconv.iconv("UTF-8", doc.to_s.encoding.to_s, doc)

使用//IGNORE忽略无法转换的字符
	Iconv.iconv("UTF-8//IGNORE", "GBK//IGNORE", doc)


参考,老宋rubyer中文ruby力量,必须支持

在文件头指定程序编码
在***.rb头上添加,注意:一定要在第一行,中间添加无效
	#coding: utf-8

这个是用来处理代码编码的,就是代码中的中文
---------------华丽丽的历史小分割------------------------
以上只是个人的一些总结,如果你有其它方法,不妨发出来一起分享

简单汇总,都是JE上的,就是弄到一起

第一种情况,open的网站参数有中文

url="http://book.douban.com/subject_search?search_text=SQL语言艺术=1001"
Nokogiri::HTML(open(url))

就会报错,因为浏览器打包给服务器发送参数的时候是经过编码的,所以我们也要给汉字经过一次编码,只需在这两句中间加上一句就可以了
url=URI.escape(url)

这样 rul 字符串就被编码成 这样:sql%E8%AF%AD%E8%A8%80%E8%89%BA%E6%9C%AF就没问题了
注意:上边的编码是吧 一个汉字转换成三个字节 语 -》%E8%AF%AD(看百分号就知道到了)如果你要抓取的网站编码是GBK 那么 要把它转换成 一个汉字 对应成 2个字节,%E8%AF 。

来自这里

第二种情况, 自己网站是utf-8,open的网站是gb2312有中文

doc = Nokogiri::HTML.parse(open("http://www.soso.cn/"), nil, "gb2312")  
@links = doc.css("a")  


出自虎炮回答

第三种是需要  Iconv转换

目标网页是gb2312编码,有些页面能采回来,有些又提示有 无效的字符编码
Ruby代码
doc = Nokogiri::HTML(open(url)) 


改为

doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))  


url = "http://www.hishibo.cn"  
doc = Nokogiri::HTML(open(url))  
doc.css("h3").each do |c|  
  puts Iconv.iconv("GBK//IGNORE", "UTF-8//IGNORE", c.content)    
end  


参考论坛
 

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))   
  
doc.css('h3.r a.l').each do |link|   
   puts link.content   
end  

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

doc.css('h3.r a.l').each do |link|
   puts link.content
end

换种方式实现:

doc.xpath('//h3/a[@class="l"]').each do |link|   
    puts link.content   
end  

doc.xpath('//h3/a[@class="l"]').each do |link|
     puts link.content
end

我们还可以这样来写:


doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|   
     puts link.content   
end  

doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|
      puts link.content
end

编码问题需要另行转换。

结果如下所示:

引用
Aaron Patterson (tenderlove) on Twitter
Tender Lovemaking
Force M.D. - Tender Love Lyrics
Force MDs - Tender Love
Jordan Knight - Tender Love
Alicia Keys- Tender Love(live)
tenderlove's nokogiri at master - GitHub
Tender Love and  Care on Flickr - Photo Sharing!
USHER - TENDER LOVE LYRICS
Love Quotes - Tender Love Quotes
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics