perl-unicode

Re: unicode issue in Perl CGI

2006-07-07 14:46:18
At 6:03 PM +0530 7/7/06, uttam hoode wrote:
hi friends,
i have a CGI form which recieves name, address etc and stores it in Oracle database. For english language it is working fine. but when i try to store some arabic data it is
displayed as '??????' (in browser, when queried) .

also i want to know how to compare two unicode values in Perl.

 eg  $city eq "xxxxxxxx"   where x  is a unicode data in hebrew

Regards,
uttam

I was working through solving some similar problems yesterday, so may be able to help you. If you do these things consistently, it should help you:

1. Assuming you have a Unicode-saavy text editor and are using Perl 5.8.1 or later, put "use utf8;" at the top of all your Perl files. When you do that, you can put literal Unicode characters in your code, so you can type in the "xxxx" literally.

2. If you are running in CGI mode of faux CGI mode like Apache::Registry, do a "binmode( STDOUT, ':utf8' )" when your program starts up, and also include a -charset => 'UTF-8' argument in your CGI header() call, so that your output is declared in and actually in UTF-8, so you can see output correctly.

3. Third, since CGI.pm seems to not be Unicode aware and passes data through as bytes, try doing this on what you get from param():

    if (!Encode::is_utf8( $param_val )) {
        $param_val = Encode::decode_utf8( $param_val );
    }

4. As I don't use Oracle now, I don't know the details, but you may separately have to configure the Oracle connection charset and/or filter its input and output to be Unicode. I know I had to for MySQL. Make sure your tables are defined as Unicode.

-- Darren Duncan

<Prev in Thread] Current Thread [Next in Thread>