`

windows平台ruby1.8.6p287的iconv有bug??

阅读更多
这两天在写爬虫,需要iconv来转换字符编码,昨天在解决一个不存在的问题。。
嗯,我的意思是这个问题是别人的问题,不是我的问题。
Iconv.iconv("UTF-8//IGNORE","GB18030//IGNORE",str)居然还会出错导致程序中断。但是我一直没有注意到出错的时候没有输出任何ruby异常,而是只显示一个类似这样的字符串"\277"。搜索了一整天没有结果,后来仔细一想,感觉输出不太对劲,会不会是iconv底层c那部分的问题?于是换到ubuntu下用ree1.8.7来试,结果就没问题了……
========================================================

另外还有一个奇怪的问题……
begin
  @topic_page = @topic_page.link_with(:text => "#{@page}").click
rescue Net::HTTPInternalServerError
  retry
end

这里居然还会抛Net::HTTPInternalServerError,真是不合逻辑啊不合逻辑……
=======================================================
郁闷了,搞了半天,Net::HTTPInternalServerError居然不是一个Error,不是StandardError的子类。

自己启动了个服务器,在articles controller的index方法里写个raise '',再用以下代码访问:
require 'mechanize'

agent=WWW::Mechanize.new
begin
  page = agent.get 'http://localhost:3000/admin/articles'
rescue =>err
  puts "#{err.class}##{err}"
end


输出:WWW::Mechanize::ResponseCodeError#500 => Net::HTTPInternalServerError
原来如此啊....rake任务打印出的异常信息全都不带类名么?这样前面第1个错误的解决也是歪打正着了……

改个加强型的,哇哈哈哈哈:
def self.access(target)
  begin
    if target.respond_to? 'click'
      url = target.href
      target.click
    else
      url = target
      @@agent.get(target)
    end
  rescue WWW::Mechanize::ResponseCodeError => err
    #FIXME: puts到时候改为log
    puts "#{err}, caused by accessing: #{url}"
    sleep 10
    retry
  end
end
分享到:
评论
10 楼 Hooopo 2010-01-02  
额。。那个有问题..
9 楼 yuan 2010-01-02  
Hooopo 写道
Iconv.conv 'UTF-8//IGNORE', 'GBK//IGNORE', str  
一点问题没有

你试试6楼的代码
8 楼 Hooopo 2010-01-02  
什么都没问题...
7 楼 Hooopo 2010-01-02  
Iconv.conv 'UTF-8//IGNORE', 'GBK//IGNORE', str  
一点问题没有
6 楼 yuan 2010-01-02  
Fx这是你要的repro:
require 'hpricot'
require 'open-uri'
require 'iconv'

def gbk_to_utf8(str)
  Iconv.iconv 'UTF-8//IGNORE', 'GB18030//IGNORE', str
end
doc = Hpricot open('http://www.tianya.cn/new/publicforum/content.asp?stritem=free&idarticle=1693330&part=0&flag=1')
tables = doc.at('#pContentDiv').search('table')
tables.each do |table|
  puts "作者:#{gbk_to_utf8(table.at('a').inner_text)}"
end
5 楼 yuan 2010-01-01  
RednaxelaFX 写道
能贴个minimal repro来看看么?

看成report..repro是啥?
4 楼 yuan 2010-01-01  
238行
if head.at('a') && GBK_TO_UTF8.iconv(head.at('a').inner_text)==@topic.author
3 楼 yuan 2010-01-01  
RednaxelaFX 写道
能贴个minimal repro来看看么?

昨天发过个临时帖,后来删除了,内容就像这样的:
引用
E:\yuan\workspace\rails\tieku>rake spider:scrape SITE=tianya --trace
(in E:/yuan/workspace/rails/tieku)
** Invoke spider:scrape (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute spider:scrape
正在进入网站:天涯社区
进入论坛:澶╂动鏉傝皥,uri:http://www.tianya.cn/publicforum/articleslist/0/free.shtml
creating topic...............
标题:姝诲垜鐘€斺€旀鍒戠姱琛屽垜鍓嶇殑涓嶇湢澶湥瑄ri:http://www.tianya.cn/publicforum/content/free/1/1676828.shtml
正在访问第2页
正在访问第3页
正在访问第4页
正在访问第5页
正在访问第6页
正在访问第7页
正在访问第8页
............
正在访问第45页
正在访问第46页
正在访问第47页
正在访问第48页
正在访问第49页
rake aborted!
"\300"
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:238:in `iconv'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:238:in `read_rest_posts'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:237:in `each'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:237:in `read_rest_posts'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:200:in `read_posts_of_current_page'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:167:in `create_topic'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:140:in `process'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:123:in `iterate_hot_topics'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:120:in `each'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:120:in `iterate_hot_topics'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:91:in `iterate_pages'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:80:in `process'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:59:in `iterate_forums'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:56:in `each'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:56:in `iterate_forums'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:47:in `process'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:19:in `dispatch'
E:/yuan/workspace/rails/tieku/lib/tasks/scrape.rake:288
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
d:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
d:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
d:/ruby/bin/rake:19:in `load'
d:/ruby/bin/rake:19
2 楼 Hooopo 2010-01-01  
是啊,帖个那啥…
我觉得是其他问题…
1 楼 RednaxelaFX 2010-01-01  
能贴个minimal repro来看看么?

相关推荐

    ruby1.8.6(linux)

    标题与描述中的关键词“ruby1.8.6”指向了Ruby编程语言的一个特定版本,即Ruby 1.8.6。这一版本在2007年发布,是Ruby语言发展历史上的一个重要里程碑,它在性能、稳定性和安全性方面相较于之前的版本有了显著提升,...

    ruby1.8.6-26

    本文将深入探讨Ruby 1.8.6在Windows平台上的安装过程、主要特点、使用场景以及与现代版本的差异。 首先,让我们来看看Ruby 1.8.6在Windows上的安装。文件名"ruby186-26 (1).exe"表明这是一个针对Ruby 1.8.6的...

    Ruby1.8.6 One-Click Installer.part2.rar

    Ruby1.8.6 One-Click Installer

    ruby1.8.6 + rails2.0.2 安装配置 详细说明

    这是一个适用于初学者和有一定经验的开发者的技术指南,旨在帮助您创建一个稳定的开发环境,以便开始使用Ruby on Rails(RoR)框架进行Web应用开发。 首先,我们来了解Ruby 1.8.6。Ruby是一种面向对象的、动态类型...

    ruby-1.8.6.zip

    总的来说,了解 Ruby 1.8.6 的这些知识点有助于我们理解 Ruby 语言的历史和发展,同时也有助于维护和迁移旧的 Ruby 项目。虽然它已经过时,但其核心理念和设计原则仍然影响着现代的 Ruby 编程实践。

    ruby1.8.6stdlib.rar完整版

    Ruby-doc is a project dedicated to creating and collecting documentation on Ruby. You can find collections of articles and other resources at the website. stdlib-doc is a RubyForge project that ...

    ruby-enterprise-1.8.6-20090201

    Ruby 1.8.6是该语言的一个早期稳定版本,尽管后来有了更新的版本如2.x和3.x系列,但1.8.x在许多老项目中仍被广泛使用。 REE的主要特性包括: 1. **Performance Enhancements(性能提升)**:通过引入了一个名为...

    Ruby 1.8.6 on Rails 2.1.0 Install.txt

    本文档旨在指导用户如何在 Windows 操作系统上安装 Ruby 1.8.6 版本以及 Rails 2.1.0 版本,并确保其正确运行。这些版本虽然已经比较老旧,但在某些特定场景下仍然有使用需求。 #### 准备工作 在进行安装前,请...

    ruby 1.8.6官方chm文档

    ruby 1.8.6官方chm文档,做为ruby开发者,这是必备文档.

    Ruby1.8.6 One-Click Installer.part1.rar

    Ruby1.8.6 One-Click Installer

    Ruby1.8.6 One-Click Installer无效

    Ruby1.8.6 One-Click Installer带SciTE

    ruby-1.8.6.tar.gz 编译器

    Ruby 1.8.6是Ruby的一个较旧版本,发布于2011年,尽管它已经被更现代的版本如Ruby 2.x和3.x取代,但在某些特定场景或项目中,仍然有其应用价值。 在描述中提到的"ruby-1.8.6.tar.gz"是一个压缩包,它包含了完整的...

    ruby1.8.6 API

    好用的API chm格式 想要的就下载吧!!!!

    ruby-1.8.6-p114.tar.gz

    标题中的"ruby-1.8.6-p114.tar.gz"表明这是一个关于Ruby编程语言的老版本源码包。Ruby是一种面向对象的、动态类型的脚本语言,由日本人松本行弘(Yukihiro Matsumoto)在1990年代末期设计并开发。1.8.6是其版本号,...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    访问Ruby官方网站或镜像站点,下载与操作系统相对应的Ruby安装包,确保下载的版本至少为1.8.6。安装过程通常是一个向导流程,用户只需按照提示完成各个步骤即可。安装完成后,可以通过在命令行输入`ruby -v`来检查...

    脚本引擎内核源代码之:Ruby-1.8.6.tar.gz

    VC6是一款经典的C/C++集成开发环境,尽管较旧,但在某些场景下仍被开发者用来构建Windows平台上的应用程序,包括开源项目。 Ruby的内核是其核心组件,负责执行解释和管理内存等低级任务。在源代码中,你可以找到...

    ruby-1.8.6.tar.bz2

    ruby-1.8.6.tar.bz2

    Windows上配置Ruby运行环境详解

    在Windows操作系统上配置Ruby运行环境是一项重要的步骤,尤其对于开发者来说,这将使得你能够运行Ruby程序和使用相关的开发工具。Ruby是一种动态、面向对象的脚本语言,它以其简洁的语法和强大的元编程能力而受到...

    ruby 1.8.6 api

    ruby api ruby文档 英文 ruby开发必备

    ruby186-26.rar

    这个压缩包“ruby186-26.rar”包含了 Ruby 1.8.6 的安装程序,特别是文件“ruby186-26.exe”,这很可能是Windows平台上的安装执行文件。 Ruby 语言是Yukihiro "Matz" Matsumoto 在1995年设计并开发的一种面向对象的...

Global site tag (gtag.js) - Google Analytics