#22 楼 @hooopo #21 楼 @chinacheng #19 楼 @huacnlee 感谢三位大牛这么热心,我把执行结果简单整理了一下:
法一、结合 meta_encoding 和 Iconv
#coding: utf-8
require 'open-uri'
require 'nokogiri'
require 'iconv'
#这个url是百度一个快照的地址,直接拿来做例子。
url = "http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105690365203c0743ca08f426284cd15c6790a120131b6e667690d44809e222615ea141cbcff&p=817bc45b87934eac5fa8c7710a0d&user=baidu&fm=sc&query=site%3Arubyer%2Eme&qid=b351e91d4dc50477&p1=2"
response = open(url).read
response = Nokogiri::HTML.parse(response)
response = Iconv.conv("utf-8", "gb2312", response)
puts respons
执行结果:
➜ cache_spider git:(master) ✗ ruby temp.rb
temp.rb:11:in conv': "\xF8վ\xB5ļ\xB4ʱҳ\xC3档)\r\n\r\n\r\n"... (Iconv::IllegalSequence) from temp.rb:11:in
法二、直接猜编码为 utf-8
# 省略url前代码
response = open(url).read
response = Nokogiri::HTML.parse(response,nil,"utf-8")
puts response
能输出 HTML,但基本乱码,类似:
ÒÔÇ°¶Ômodel¸³Ä¬ÈÏÖµÒ»Ö±ÊÇͨ¹ýÐÞ¸ÄmigrationÀ´ÊµÏÖ£¬¿´ÁËruby-chinaµÄÔ ´Âëºó¸Ð¾õÄÇÑùдÈç¹ûǨÒÆÊý¾Ý¿âʱ»á±È½ÏÂé·³£¬»¹ÊǷŵ½modelÀïºÏÊÊ¡£ÓÚÊǸøÏîÄ¿µÄmodelÌí¼ÓÁËbefore_create£¬È»ºóÔËÐÐrake db:s...
法三、直接猜编码为 utf-8
# 省略url前代码
response = open(url)
response = Nokogiri::HTML.parse(response,nil,"gb2312")
#response = Nokogiri::HTML.parse(response)
#response = Iconv.conv("utf-8", response.meta_encoding, response)
puts response
输出:
➜ cache_spider git:(master) ✗ ruby temp.rb output error : unknown encoding gb2312
法四、试了以上 3 种方法都失败后,我才想自己处理编码。
def convert_encoding(source_encoding, destination_encoding, str)
ec = Encoding::Converter.new(source_encoding, destination_encoding)
begin
ec.convert(str)
rescue Encoding::UndefinedConversionError
p $!.error_char.dump
p $!.error_char.encoding
rescue Encoding::InvalidByteSequenceError
p $!
p $!.error_bytes.dump if $!.error_bytes
p $!.readagain_bytes.dump if $!.readagain_bytes
end
str
end
试了 gbk, utf-8, gb2312 各种组合,都不完美。
#3 楼 @huobazi 百度的源码的确是“GB2312”的,Iconv.new 'UTF-8//IGNORE', 'UTF-8'
的结果是Ruby-×¢Ruby,Railsߪעܼ - Part 7
全乱了。
#7 楼 @ruby_sky Iconv.iconv("UTF-8//IGNORE","GB2312//IGNORE"
。这样转换只能部分成功,结果类似Ruby迷-关注Ruby,Rails擢注芗释 - Part 7
让人非常纠结。
#10 楼 @lanisle force_encode
只是显示指定字符串的编码类型,其实并没有改变字符串内容。与 Iconv 指定编码类型转换无异。
目前最好的方法还是使用 Iconv("UTF-8//IGNORE", "GB2312//IGNORE", str),GBK 也试过,但结果变成了
“马想到了 Helper 中有 strip_tags 这溉L可以过滤掉字符串中所有 HTML 标签 c 斋 helper 捉专默认只能在 MVC 层中的 View 层使“
Ruby 1.9 中不再推荐使用Iconv
,把Iconv.iconv('gbk', 'utf-8', string)
变成了string.encode('gbk', 'utf-8')
,但是换汤不换药的东西。
伤不起呀,不禁感叹,难道 Ruby 处理编码还是硬伤吗???
#5 楼 @tiseheaini 你帖子里说的 1,2,3,4,5 都要下载的。因为一个 cd 有 700m 容量限制才分开打的包。 尽管装吧,能撑到现在的笔记本装个 linux 应该不会太差。装好再说
#2 楼 @tiseheaini 如果网络不稳定的话,从这里下载 CD 或 DVD 版完整安装包吧,http://www.debian.org/CD/http-ftp/#stable 安装软件多原则上不会影响运行速度,只要不启动即可。
#7 楼 @Standme 先谢谢啦,当时因为备案太麻烦才租的 Linode。 #8 楼 @tassandar 用过这种插件,当时发送不了附件。只能发一条标题,就没折腾了。 #9 楼 @lidashuang ,#11 楼 @john1king 非常感谢,尤其是提供的链接,我找到了所有博客数据。目前就剩下图片和评论了。如果你们来深圳,我请你们吃饭。 #17 楼 @ery EC2 不是被墙了吗?Linode 最便宜的一年也要 200$,所以才合租的。 #16 楼 @congteng #12 楼 @victorjames 多谢关注,我一定会把 Ruby 迷办下去。不为啥,只为自己喜欢。
#1 楼 @qichunren #2 楼 @huobazi 现在只能通过快照来手动恢复了,100 多篇,够烦的。而且图片丢失了,只有文字,评论恢复也麻烦:( 考虑下 github pages
这都啥时候的博文的,恶作剧。 http://blog.nosqlfan.com/html/3409.html
这个帖子好呀
['a', 'b', '', nil, 'c', 'c'].compact.uniq
=> ["a", "b", "", "c"]
清理数组
highcharts +1
从效率,存储,性能各方面来讲明显第二种好些吧,因为它是集中存储。
#23 楼 @jinleileiking #26 楼 @hhuai 估计 matz 当时也想设计成{},但后来由于{}被用到 lambda 里的,就选了 end。 end 我觉得还好,惟一不爽的是你把光标放到 end 上不能高亮开头的 do。 而 ()[]{}一般都能自动高亮另一半。哪位有办法吗?
所以说,有个好名字是多么重要
关注,可惜人不在杭州,又不想挪动
checkio 上面有 Python 教程,习题,还有竞技。ruby 社区这种其实也挺多的,只是单个网站功能没这么集中。像 http://tryruby.org/ http://rubymonk.com/ 教程很有趣,高级内容要收费 http://www.therubygame.com/ ruby 编程游戏比赛