Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Reading russian characters

by jacob (Initiate)
on Nov 14, 2012 at 05:41 UTC ( #1003756=perlquestion: print w/ replies, xml ) Need Help??
jacob has asked for the wisdom of the Perl Monks concerning the following question:

Hi, i need some help in fetching russian text from dbi, when i fetch the data, it only prints ???? instead of the character. But when i directly assign a russian text to a variable it prints it fine. Need help thanks!

Comment on Reading russian characters
Re: Reading russian characters
by afoken (Parson) on Nov 14, 2012 at 06:44 UTC

    Show the relevant code.

    Make sure your DBD is configured to use Unicode. This is usually done during DBI->connect(), using an attribute value.DBD::Pg needs pg_enable_utf8 => 1, DBD::mysql needs mysql_enable_utf8 => 1, DBD::SQLite needs sqlite_unicode => 1 (but that breaks BLOBs), . Some DBDs can handle Unicode automatically, like DBD::Oracle (but you have to set either $ENV{'NLS_LANG'} or $ENV{'NLS_NCHAR'} to AL32UTF8, before loading Oracle DLLs, i.e. in a BEGIN block as early in your script as possible). DBD::ODBC handles Unicode automatically if it was compiled with Unicode support (default on Windows).

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
Re: Reading russian characters
by stefbv (Deacon) on Nov 14, 2012 at 08:13 UTC

    In addition to the information provided by afoken, DBD::Firebird needs ib_enable_utf8 = 1.

    Ștefan

Re: Reading russian characters
by Anonymous Monk on Nov 14, 2012 at 14:23 UTC
    Also, find a way to look at (say in hexadecimal) what the actual bytes are, that are being rendered as "????" on output. (How are you generating that output? To the console; a web page?) Question-marks probably just mean a display-only issue: the bytes are there, and correct, but the system doesn't know what charset to use to display them. Could be that they're not there, though; that they've been corrupted earlier. Only one way to know for sure.

      I remember that I got a literal ? (chr 63) from a database whenever it had a character not representable by the current connection encoding. But I can't remember which database behaved like that.

      Java often also behaves like this. This is documented in http://docs.oracle.com/javase/6/docs/api/java/nio/charset/CharsetEncoder.html.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1003756]
Approved by shmem
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2015-01-30 07:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My top resolution in 2015 is:

















    Results (248 votes), past polls