Make sure the charset and collation is set correctly in your DB.
The rexml version you are using is the one that's coming with 1.8 and
therefore doesn't have anything to do with 1.9 encoding.

My guess is that your db table isn't set as utf8.

- Matt


On Wed, Sep 23, 2009 at 1:39 PM, nblinux <[email protected]> wrote:

>
> HI,
>
> I have a ruby program that takes activerecord data and outputs it to
> XML using the REXML library.
>
> It has been working fine until some accented characters were used in
> one of the fields.
>
> I have isolated the error message to this file C:\ruby\lib\ruby
> \1.8\rexml\encodings\ICONV.rb and line after the commented out line
> below:
> =====================
> module REXML
>  module Encoding
>    def decode_iconv(str)
>      Iconv.conv(UTF_8, @encoding, str)
>    end
>
>    def encode_iconv(content)
>      # cag changed to test encoding hack
>      #Iconv.conv(@encoding, UTF_8, content)
>      Iconv.conv(@encoding, 'LATIN1', content)
>    end
>
>    register("ICONV") do |obj|
>      Iconv.conv(UTF_8, obj.encoding, nil)
>      class << obj
>        alias decode decode_iconv
>        alias encode encode_iconv
>      end
>    end
>  end
> end
> =======================
>
> So I think this has to do with REXML expecting UTF-8 which is fine in
> Ruby 1.9 but Ruby 1.8 uses LATIN1 I think. I hacked the file as shown
> above and this works, but what I really want to do is override the
> "encode_iconv" method in this module in my own code so I am not
> changing the core libraries.
>
> I have attempted a couple of things but can't quite get it such as
> putting this at the top of my main file before call that uses it:
> ===========================
> include REXML
>
> module REXML
>    module Encoding
>    def encode_iconv(content)
>      Iconv.conv('ISO-8859-1', 'LATIN1', content)
>    end
>  end
> end
> ===========================
>
> To test I just created a simple xml document
>   @doc = Document,new("<xml? version='1.0' encoding='iso-8859' ?
> ><some text here/>")
>   ... add some elements etc ...
> and then this is the call where it invoked:
>   @doc.write(xml_string,0)
>
> I also tried eval technique from a David Black post and saw some posts
> indicating use of self and object reference.
>
> Anyone got an idea? Is is because it is mixed in somewhere when REXML
> is loaded and thus my override attempts are not recognized?
>
> Thanks,
>  Carl
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
-~----------~----~----~----~------~----~------~--~---

Reply via email to