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)"