utf8 encoding problem



Hello,

I had posted this question in CPAN forum but i was directed here for a
better answer.

Here is the problem I am facing. In the following piece of code I get a
customer name from the database and append a pound symbol to the customer
name and update the same in the database. The NLS_LANG parameter is set to
AMERICAN_AMERICA.WE8DEC (western European character set) When I query the
database to see if the name has been updated correctly I see some garbage
value appended to the name instead of just a pound symbol. Then I did some
research to find out the version oralce DBD version being used is 1.12. I
found some difference between 1.12 and 1.14 relating to unicode
documentation. All I want to know is whether this was a bug in 1.12 which
was fixed in the later version of 1.14 and will an upgrade to 1.14 fix this
problem. Could anyone please confirm me on this? The closer I could get was
to find this link http://search.cpan.org/dist/DBD-Oracle/Changes#___top.
However the work around was to use "use Encoding" (Which is commented out in
the following code) in perl which fixed the problem.

Cheers,

Anand.



use strict;

use encoding 'utf8';

use atadb;

use vars qw($opt_u);

my $db = atadb::connect($opt_u);

my $sql = " SELECT NODE_NAME FROM CUSTOMER_NODE_HISTORY WHERE
CUSTOMER_NODE_ID = 9295370 ";

my $csr = $db->prepare($sql) || ataerr::dbprepare($db);

$csr->execute() || ataerr::dbexecute($db);

my $node_name = $csr->fetchrow; $csr->finish;

$node_name = 'wre'; my $pound = " \xc2\xa3"; print "Pound =>$pound\n";

my $node_name_upper = "\U$node_name\E".$pound; $node_name.=$pound; print
"Node name".$node_name."\n";;

print $node_name_upper."\n"; my $sql1 = "UPDATE CUSTOMER_NODE_HISTORY SET
NODE_NAME = ? , NODE_NAME_UPPERCASE = ? WHERE CUSTOMER + +_NODE_ID = 9295370
";

my $csr1 = $db->prepare($sql1) || ataerr::dbprepare($db); print "Executing
.... \n"; #use Encode; #$node_name = encode($ENV{PERL_ENCODING}, $node_name);
#$node_name_upper = encode($ENV{PERL_ENCODING}, $node_name_upper);

$csr1->execute($node_name, $node_name_upper) || ataerr::dbexecute($db);

print "Committing ... \n";

$db->commit || die("commit: ".$db->errstr."\n");

$csr1->finish; $db->disconnect;

Relevant Pages

  • RE: utf8 encoding problem
    ... temporary install of a newer version of DBD::Oracle by using the ... name and update the same in the database. ... AMERICAN_AMERICA.WE8DEC (western European character set) When I query ... However the work around was to use "use Encoding" (Which is commented ...
    (perl.dbi.users)
  • Re: VW --> Bianary file into CLOB or BLOB
    ... Page 1252 encoding, which is normal Windows encoding for Western European ... the database as I manage this on both PostgreSQL, Oracle and ODBC ... My outstanding problem was to create a valid ByteArray from no matter ...
    (comp.lang.smalltalk)
  • Re: VW --> Bianary file into CLOB or BLOB
    ... Page 1252 encoding, which is normal Windows encoding for Western European alphabets. ... the database as I manage this on both PostgreSQL, Oracle and ODBC following the documentation. ... My outstanding problem was to create a valid ByteArray from no matter what file as I previously used the ByteArray coming from ImageReader. ...
    (comp.lang.smalltalk)
  • Re: DB2 UTF-8 ODBC double conversion
    ... Unicode considers the various UTFs flavors completely equivalent. ... Just various encoding forms for the same thing. ... this means that everyone who is using that database has ... they can't use your database to represent as many characters as ...
    (microsoft.public.vc.mfc)
  • Re: Arabic Lanaguage support
    ... "Encoding type:" It remains blank by default. ... >> in retrieving records from the database. ... >> '%1%2%3+' etc and retrieve no records although these ... >>> A hyperlink can not retrieve data from a database. ...
    (microsoft.public.frontpage.programming)