Hi

here is a program that shows something wrong when using
Text::Iconv with
IO::Scalar or IO::String


read a sample xml file, with an accented character, after
xml parsing (which translates to utf-8), translate back to iso-
8859-1.

also prepare a simple utf-8 string with text::iconv


problem :
when print is done with IO::Scalar or IO::String redirection,
conversion fails.


pascal


here the XML is read with XML::Simple or XML::LibXML,
but this is the same with XML::XPath


note Text::Iconv->raise_error(1) raises no error.


source program test:
--------------------------------------------------------
use warnings;
use XML::Simple;
use Text::Iconv;
use XML::LibXML ;
Text::Iconv::->raise_error(1);

my $string=q{<?xml version="1.0" encoding="iso-8859-1" ?
><grp>étude</grp>};

my $string2=Text::Iconv->new("iso-8859-1","utf-8")->convert
("étude");

my $doc =XML::LibXML->new->parse_string($string) ;

my $ref=XML::Simple->new->XMLin($string);

my $C= Text::Iconv->new('UTF-8','ISO-8859-1');



print "\n------------------------------\n";
print $doc->toString, "\n raw:", $ref,"\tconv:", $C->convert
($ref);
print "\n str2:", $string2,"\tconv:", $C->convert($string2);


------------------------------------------------------



source program calltest
-----------------------------------------------------
use IO::Scalar;
use IO::String;

    my $page;
    my $CACHE =new IO::Scalar \$page ;
    select $CACHE;
    do 'test' ;
    select STDOUT;
    print $page ;


    my $io=IO::String->new(my $tocache);

    select  $io ;
    do 'test' ;
    select STDOUT ;


    print $tocache ;

     do 'test' ;

----------------------------------------------------------------
-----------
output of PERL test
----------------------------------------------------------------
--


------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<grp>étude</grp>

 raw:étude     conv:étude
 str2:étude    conv:étude

raw print is UTF-8, conv print is iso
XML output is in iso directly
Iconv conversion is successful
raw and str2 are the same
all correct


now look at other output :

==========================================
output of PERL calltest


IO::Scalar ------------------------------

<?xml version="1.0" encoding="iso-8859-1"?>
<grp>étude</grp>

 raw:étude     conv:étude
 str2:étude  conv:étude

IO::String------------------------------

<?xml version="1.0" encoding="iso-8859-1"?>
<grp>étude</grp>

 raw:étude     conv:étude
 str2:étude  conv:étude

STDOUT------------------------------

<?xml version="1.0" encoding="iso-8859-1"?>
<grp>étude</grp>

 raw:étude     conv:étude
 str2:étude    conv:étude
=============================================


ICONV fails to convert when IO redirection,
 looks like characters are not the same between raw and
string2, which
both should be utf-8 translation of "étude"


the toString method of LIbXML seems to output back in iso-8859-
1, without explicit
translation, but this fails with IO redirection too.




Accédez au courrier électronique de La Poste : www.laposte.net ; 3615 LAPOSTENET (0,13 
€/mn) ; tél : 08 92 68 13 50 (0,34€/mn)"



Reply via email to