代码之家  ›  专栏  ›  技术社区  ›  Marc Seeger

使用www::mechanize时的Iconv::非法序列

  •  2
  • Marc Seeger  · 技术社区  · 16 年前


    代码:

    require 'rubygems'
    require 'mechanize'
    
    agent = WWW::Mechanize.new
    
    agent.user_agent_alias = 'Mac Safari'
    answer = agent.post('https://www.budget.de/de/reservierung/privatkunden/step1/schnellbuchung',
    {"Country" => "Deutschland",
    "Abholstation" => "Aalen",
    "Abgabestation" => "Aalen",
    "Abholdatum" => "26.02.2009",
    "Abholzeit_stunde" => "13",
    "Abholzeit_minute" => "30",
    "Abgabedatum" => "28.02.2009",
    "Abgabezeit_stunde" => "13",
    "Abgabezeit_minute" => "30",
    "CountryID" => "DE",
    "AbholstationID"=>"AA1",
    "AbgabestationID"=>"AA1"
    }
    )
    puts answer.body
    

    错误:

    D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/util.rb:29:in `iconv': "\204nderungen vorbe"... (Iconv::IllegalSequence)
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/util.rb:29:in `to_native_charset'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/response_header_handler.rb:29:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:30:in `pass'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/handler.rb:6:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/response_body_parser.rb:35:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:30:in `pass'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/handler.rb:6:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/pre_connect_hook.rb:14:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:25:in `handle'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:494:in `fetch_page'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:545:in `fetch_page'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:403:in `post_form'
    from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:322:in `post'
    from test.rb:7
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Nathan de Vries    16 年前

    WWW::Mechanize::Util::CODE_DIC[:SJIS] = "UTF-8"
    

    把它放在你旁边 require

    注意:我解决这个问题的方法是使用回溯调试Mechanize库。这 to_native_charset detect_charset

        2
  •  0
  •   Simon Woker    13 年前

    Mechanize::File
    我能够通过手动转换来修复它 Iconv

    result = @agent.get uri
    # Mechanize::File instead of Mechanize::Page is returned 
    # so we have to convert manually
    result = Iconv.conv("utf-8", "iso-8859-1", result.body)