Help getting around iconv on a PC

Discussion in 'Ruby' started by Anders, Dec 1, 2005.

  1. Anders

    Anders Guest

    I've just started using Ruby again, and maybe it's because it's been
    awhile since I've used it, but I've gotten stuck. I want to use the
    bloglines Webservice API. So, I downloaded and installed it as well as
    simple-xml, which it uses. I run a simple test:

    require 'webservice/bloglines'
    print "done!\n"

    Ruby chokes, saying:

    :/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require__': No such file to load -- iconv (LoadError)
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require'
    from c:/ruby/lib/ruby/site_ruby/1.8/webservice/parser.rb:4
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require__'
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require'
    from c:/ruby/lib/ruby/site_ruby/1.8/webservice/restapi.rb:7
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require__'
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require'
    from c:/ruby/lib/ruby/site_ruby/1.8/webservice/bloglines.rb:3
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require__'
    from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
    `require'
    from test.rbw:1

    As far as I can tell from looking around the web, iconv is a Unix
    library, and I'm on a PC running WinXP. How do I work around this? To
    figure out what the parser is using iconv for, I've included the code
    below. Any help would be greatly appreciated.

    Thanks,
    Anders Schneiderman
    SEIU International
    -------------------------------------------------------------------------------------

    # $Id: parser.rb,v 1.2 2004/09/29 04:19:10 date Exp $

    require 'xmlsimple'
    require 'iconv'

    # handling invalid character
    # Replace from invalid character to `?'
    # (instead of numerical character reference).
    # Because REXML convert numerical character reference at parsing time.
    class Iconv
    def self.fix_malformed_characters(str)
    iconv = Iconv.new("UTF-8", "UTF-8")
    out = ""
    begin
    out << iconv.iconv(str)
    rescue Iconv::IllegalSequence => e
    out << e.success
    ch, str = e.failed.split(//n, 2)
    out << if respond_to?:)unknown_unicode_handler)
    unknown_unicode_handler(ch)
    else
    "?"
    end
    retry
    end
    return out
    end
    end

    module WebService

    class Parser
    def initialize
    end

    # for REXML
    def fix_encoding(xml_source)
    xml_source.sub(/encoding="utf-8"\?>/i, 'encoding="UTF-8"?>')
    end

    def parse(xml_source)
    xml_source = fix_encoding(xml_source)
    xml_source = Iconv.fix_malformed_characters(xml_source)
    XmlSimple.xml_in(xml_source,
    { 'ForceArray' => false, 'KeepRoot' => true }
    )
    end
    end

    end
     
    Anders, Dec 1, 2005
    #1
    1. Advertisements

  2. Anders

    Dave Burt Guest

    I've put together a package to install iconv on a One-Click Ruby box here:
    http://dave.burt.id.au/ruby/iconv.zip

    Cheers,
    Dave
     
    Dave Burt, Dec 1, 2005
    #2
    1. Advertisements

  3. Dan Smorey Jr., Dec 1, 2005
    #3
  4. Thanks, Dave! That did the trick.

    Anders
     
    Anders Schneiderman, Dec 1, 2005
    #4
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.