did you correctly set the encoding in activerecord, back in 1.X something I believe I changed it to be utf-8 by default, that might be your problem.
- Matt On Wed, Sep 23, 2009 at 2:00 PM, Carl Graff <[email protected]> wrote: > > Hi Matt, > > The database is legacy and is in LATIN1 and therefore I cant change the > encoding. Everything works fine until I get to the @doc.write call which > in turn ends up calling the method that I hacked to work. > > I see that they aliased the method here in the library: > alias encode encode_iconv > in a register block that is a little mysterious to me - but maybe I can > alias to redirect to what I want in some way. > > I can use brute force but hoped someone might have experience in > overriding module methods as that seems to be the least invasive way to > fix this. > > Maybe I will post this on Nabble somewhere as well just in case. > > Thanks, > Carl > > > > Matt Aimonetti wrote: > > 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] > > <mailto:[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 -~----------~----~----~----~------~----~------~--~---
