`

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
分享到:
评论

相关推荐

    彻底解决中文乱码的问题

    本篇文章将深入探讨这个问题,并提供一种彻底解决中文乱码问题的方法。 首先,我们需要理解什么是乱码。乱码通常出现在字符编码不匹配的情况下,即数据存储或传输时采用的编码格式与读取或显示时使用的编码格式不...

    c#汉字乱码处理

    当在C#控制台应用中遇到汉字输出乱码的情况,这通常是因为编码不匹配所导致的。编码是字符集与二进制数据之间的转换规则,不同的系统或软件可能默认使用不同的编码格式,如UTF-8、GBK(GB2312的扩展)、UTF-16等。 ...

    express中文乱码解决

    中文乱码主要由以下几种情况引起: 1. **前端与后端编码设置不一致**:前端发送的数据采用了一种编码格式(如UTF-8),而后端接收时使用的却是另一种(如GBK)。 2. **HTTP响应头未正确配置**:HTTP响应头中的`...

    JSP乱码 N种解决方案

    - JSP页面默认使用ISO-8859-1编码,如果不做特殊处理,中文字符可能会出现乱码。 2. **JSP文件本身的编码设置** - 确保你的JSP文件本身使用正确的编码保存,如UTF-8。编辑器如Notepad++或IDEA允许你设置文件编码...

    Lua文件反编译汉字乱码处理

    Lua源代码文件通常采用UTF-8编码,因为它是一种广泛支持的国际标准,可以正确处理各种语言的字符,包括汉字。然而,反编译工具如果不识别或处理这种编码方式,就可能导致乱码。 针对这个问题,我们可以从以下几个...

    在eclipse中中文汉字乱码的解决方案

    Eclipse 中中文汉字乱码的解决方案 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),但是在使用过程中,用户可能会遇到中文汉字乱码的问题。本文将为大家分享解决 Eclipse 中中文汉字乱码的方案,以便大家...

    使用ODBC中文乱码问题.docx

    ODBC中文乱码问题解决方案 在使用ODBC对数据库进行中文字符串插入时,经常会遇到中文字符串显示乱码的问题。本文将通过对该问题的分析和解决方案,帮助读者更好地理解ODBC中文乱码问题的成因和解决方法。 一、问题...

    几种常用解决jsp中文乱码的方案

    解决 JSP 中文乱码的方案 JSP 中文乱码是动态网站...解决 JSP 中文乱码的方案有多种,选择哪种方案取决于具体情况。但无论选择哪种方案,都需要确保 JSP 的字符集和数据库的字符集保持一致,以避免中文乱码的出现。

    Ireport中文不显示以及乱码十几种解决方案

    以上就是针对IReport中文不显示及乱码问题的十几种解决方案,每种情况都有其特定的解决办法。在尝试时,请根据自己的具体情况进行操作,相信总有一种方法能帮你解决问题。如果问题依然存在,建议查阅IReport的官方...

    解决sql anywhere 11 汉字乱码问题

    汉字乱码的产生通常有以下几种原因: 1. 数据库字符集设置不正确:SQL Anywhere在创建数据库或表时,默认的字符集可能不支持中文。你需要确保数据库的字符集设置为能够处理Unicode字符的编码,如UTF-8,以便容纳...

    keepass2在Ubuntu 15.10下中文乱码的解决办法.docx

    本文介绍了 Keepass2 在 Ubuntu 15.10 下中文乱码的问题,并提供了两种解决方案:修改 /etc/fonts/conf.avail/65-nonlatin.conf 文件和使用 FC_DEBUG=1 环境变量。此外,我们还讨论了 Ubuntu Server 和 Linux 全英文...

    ZXing 2.1版GBK中文乱码解决办法

    ZXing 2.1版GBK中文乱码解决办法: zxing中扫瞄二维码图片,如果包含Gbk中文,乱码解决办法是修改DecodedBitStreamParser.h文件,在里面加入GBK的判断。 在2.1版本中,解码的定义不在这个类中了,挪到了...

    Linux系统中文乱码解决完整方案

    Linux系统中文乱码解决完整方案 本文档旨在解决 Linux 系统中文乱码问题,提供了一个完整的解决方案。该问题是由于 Linux 和 Windows 系统下所用户的字符集不同,Linux 系统使用的是 Unicode 字符集,而 Windows ...

    亲试过可以通过cygwin编译发布cocos2d-x几种中文乱码解决方案

    此文档也是我从几天焦虑中发现可以用的几种解决cocos2d-x中文乱码的方法。亲自试过了。cygwin可以编译过。但是我感觉直接在代码里面写宽字符=L("中文") 似乎不行。自己编译那个iconv好像也难,用jni回调后java转码...

    中文乱码问题分析 自己总结的

    在解决中文乱码问题时,需要注意以下几点: 1. 在 Java 文件中尽量不要写中文,如果必须写中文,尽量手动带参数-ecoding GBK 或-ecoding gb2312 编译。 2. 对于 JSP,在文件头加上 `;charset=GBK"%>` 或 `;...

    soapUI输入中文显示为乱码,响应报文中文乱码问题解决方法.txt

    soapUI输入中文显示为乱码 响应报文中文乱码问题解决方法

    jsp url中文乱码四种解决方式

    get提交中文乱码 地址重写中文乱码 jsp url中文乱码四种解决方式

    英文版Ubuntu Firefox中文乱码解决方案.docx

    英文版Ubuntu Firefox中文乱码解决方案 在英文版Ubuntu系统中,Firefox浏览器中文乱码问题是一个常见的问题。该问题可能是由于系统字体配置不当或扫瞄器设置不正确引起的。在本文中,我们将介绍解决该问题的步骤和...

Global site tag (gtag.js) - Google Analytics