Nokogiri 中文乱码的几种情况

来源:互联网 发布:英文版淘宝网swto分析 编辑:程序博客网 时间:2024/06/05 03:15


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

Ruby代码  收藏代码
  1. url="http://book.douban.com/subject_search?search_text=SQL语言艺术=1001"  
  2. Nokogiri::HTML(open(url))  

就会报错,因为浏览器打包给服务器发送参数的时候是经过编码的,所以我们也要给汉字经过一次编码,只需在这两句中间加上一句就可以了 
Ruby代码  收藏代码
  1. 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有中文 

Ruby代码  收藏代码
  1. doc = Nokogiri::HTML.parse(open("http://www.soso.cn/"), nil"gb2312")    
  2. @links = doc.css("a")    


出自虎炮回答 

第三种是需要  Iconv转换 

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


改为 

Ruby代码  收藏代码
  1. doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))    


Ruby代码  收藏代码
  1. url = "http://www.hishibo.cn"    
  2. doc = Nokogiri::HTML(open(url))    
  3. doc.css("h3").each do |c|    
  4.   puts Iconv.iconv("GBK//IGNORE""UTF-8//IGNORE", c.content)      
  5. end    

 


原创粉丝点击