Forum: Ruby oracle oci8 utf8 corruption

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
ciapecki (Guest)
on 2009-05-28 15:15
(Received via mailing list)
I have a small script oci1.rb:

require 'oci8'
conn = OCI8.new("test","test","test_db")
File.open("out.txt","wb") do |out|
  tabs = conn.exec('SELECT * from test_utf8') do |r|
     out.write(r.join(','))
     out.write("\n")
  end
end
conn.logoff

that runs perfectly on windows producing from my test_db:
polish,łóśżć
russsian,фывафыва
german,äöü

when I run exactly the same on my linux box:
polish,loszc
russsian,????????
german,aou

I tested then a small script that reads and writes UTF8 on linux
(read_write_utf8.rb):
File.open("utf8_out.txt","wb") do |out|
  File.open("utf8.txt","r").each do |line|
    out.write(line)
  end
end

and that works good!

chris@emeadb:~/work/ruby/oci$ ruby read_write_utf8.rb

chris@emeadb:~/work/ruby/oci$ cat utf8.txt
polish,łóśżć
russsian,фывафыва
german,äöü

chris@emeadb:~/work/ruby/oci$ cat utf8_out.txt
polish,łóśżć
russsian,фывафыва
german,äöü

where should I try to dig into to find out how to force the oracle
database data to be properly stored in the file on linux?
I just add that
LANG=en_US.UTF-8

thanks,
chris
krzysztof cierpisz (Guest)
on 2009-05-28 23:11
(Received via mailing list)
On May 28, 1:11 pm, ciapecki <removed_email_address@domain.invalid> wrote:
> conn.logoff
>
> chris@emeadb:~/work/ruby/oci$ ruby read_write_utf8.rb
>
> where should I try to dig into to find out how to force the oracle
> database data to be properly stored in the file on linux?
> I just add that
> LANG=en_US.UTF-8
>
> thanks,
> chris

apparently setting NLS_LANG=AMERICAN_AMERICA.UTF8 (externally! - not
in the ruby script) did the trick.

chris
Terry C. (Guest)
on 2011-08-31 01:17
krzysztof cierpisz wrote in post #821043:
> On May 28, 1:11 pm, ciapecki <removed_email_address@domain.invalid> wrote:
>> conn.logoff
>>
>> chris@emeadb:~/work/ruby/oci$ ruby read_write_utf8.rb
>>
>> where should I try to dig into to find out how to force the oracle
>> database data to be properly stored in the file on linux?
>> I just add that
>> LANG=en_US.UTF-8
>>
>> thanks,
>> chris
>
> apparently setting NLS_LANG=AMERICAN_AMERICA.UTF8 (externally! - not
> in the ruby script) did the trick.
>
> chris

I placed ENV['NLS_LANG']='AMERICAN_AMERICA.UTF8' as the first line in my
ruby script and it worked.
This topic is locked and can not be replied to.