Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme Perl, XML, et encodage des fichiers

5 réponses
Avatar
Paul
Bonjour,


J'ai un probleme que je vais essayer de vous expliquer :

j'ai un script perl qui doit lire des fichiers XML avec XML::Simple.

J'ai remarqu=E9 (apr=E8s au moins 2 heures de tests !!) que ces fichiers XML
doivent imp=E9rativement =EAtre encod=E9 en UTF-8 : cela signifie que :
- au d=E9but du fichier xml, je doit mettre <?xml version=3D"1.0"
encoding=3D"UTF-8"?>

- et aussi : le fichier doit =EAtre enregistr=E9 avec un encodage UTF-8


Or, mon probl=E8me est que je peut cr=E9er un fichier encod=E9 UTF-8 (avec
gedit, sous linux) et mon script fonctionne. Mais le script Perl doit
modifier le fichier et donc le r=E9=E9crir, et c'est l=E0 que le fichier es=
t =E9
crit avec un encodage : ISO-8859-15 (surement l'encodage de Perl).

Je pr=E9sice que le fichier =E9crit par le script contient bien la ligne au
d=E9but du fichier : <?xml version=3D"1.0"
encoding=3D"UTF-8"?>

Donc,
- Comment forcer le script =E0 cr=E9er des fichier en "vrai" UTF-8 ?
- Pourquoi mon script ne fonctionne que si le fichier XML est en UTF-8 ?
- Pourquoi j'ai mis plus de 2 heures =E0 trouver ce pseudo-bug ? :-(

J'esp=E8re avoir =E9t=E9 assez clair. merci de votre aide.

Paul.

5 réponses

Avatar
Nicolas George
Paul wrote in message :
- Comment forcer le script à créer des fichier en "vrai" UTF-8 ?


binmode $filehandle, ":utf8";

juste après l'ouverture du fichier devrait faire l'affaire. Mais je ne sais
pas à quel point XML::Simple va se comporter correctement dans ce cas.

Avatar
Paul
Bonjour,

je viens de voir que ce n'est pas seulement un problème d'encodage, mais
là, je comprends rien, je vous joint un extrait de mon script, si
quelqu'un peut l'essayer, et me dire ce qui ne va pas.

théoriquement, je souhaite que le script m'affiche :

"2 item(s)
http://www.site2.com/?toto&tata &"

mais je n'ai pas du tout cela, et ca fait plusieurs heures que je me
penche dessus (meme la nuit qui est sensée porter conseille ne marche
pas !)

Merci de votre soutien.

fichier "test.pl" :

#!/usr/bin/perl
use XML::Simple;

my $xmlReportUrl = new XML::Simple();
my $xmlReportContent = $xmlReportUrl->XMLin("./test.xml",
forcearray=>1); $myItemsXml =
$xmlReportContent->{'channel'}->[0]->{'item'};

print @$myItemsXml." item(s)n";
print "link =
".$xmlReportContent->{'channel'}->[0]->{'item'}->[1]->{'link'}->[0]."n
";

# fin du fichier test.pl

fichier "test.xml" :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Titre du canal</title>
<link></link>
<description></description>
<language></language>
<copyright></copyright>
<managingEditor></managingEditor>
<lastBuildDate>Tue, 29 2005 15:28:58 GMT</lastBuildDate>
<item>
<title>htr jt r r </title>
<link>http://www.site1.com/?toto&tata &</link>
<guid>http://www.site1.com/?toto&tata &</guid>
<description></description>
<author></author>
<category></category>
<comments></comments>
<pubDate>Tue, 29 2005 15:28:57 GMT</pubDate>
<source url="source feed">source</source>
</item>
<item>
<title>ytk ytk yt yt </title>
<link>http://www.site2.com/?toto&tata &</link>
<guid>http://www.site2.com/?toto&tata &</guid>
<description></description>
<author></author>
<category></category>
<comments></comments>
<pubDate>Tue, 29 2005 15:28:57 GMT</pubDate>
<source url="source feed">source</source>
</item>
</channel>
</rss>
Avatar
Jacques Caron
Salut,

On Tue, 29 Mar 2005 15:43:11 +0200, Paul <ernond_paul_at_yahoo.fr> wrote:

théoriquement, je souhaite que le script m'affiche :

"2 item(s)
http://www.site2.com/?toto&tata &"


Ca le fait chez moi, à condition que les & soient bien des &amp; (et amp
point-virgule).

mais je n'ai pas du tout cela, et ca fait plusieurs heures que je me
penche dessus (meme la nuit qui est sensée porter conseille ne marche
pas !)


Et ça fait quoi? Elle quelle version de perl tu utilises?

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
ernond_paul
Ca le fait chez moi, à condition que les & soient bien des &amp; (et amp
point-virgule).


Je test ce soir avec des &amp; mais c'est fort prpobable que ce soit
cela qui posait des problemes ! merci en tout cas de ton aide

Et ça fait quoi? Elle quelle version de perl tu utilises?
et bien, justement, mon script perl me dis que la balise "link"

contient tous le reste du fichier xml : effectivement ce doit etre a
cause &amp;.


Pour la version de perl, je saisa pas trop, jsuis pas chez moi... :)

Avatar
Paul
bon, et biien, je viens de tester, ca fonctionne parfaitement, donc mon
probleme n'ét(ait pas un probleme de perl mais un probleme de xml.
Merci de ton aide Jacques.

PS : This is perl, v5.8.5 built for i386-linux-thread-multi


Le Wed, 30 Mar 2005 00:15:03 +0200
"Jacques Caron" vous écriviez :

Salut,

On Tue, 29 Mar 2005 15:43:11 +0200, Paul <ernond_paul_at_yahoo.fr>
wrote:


théoriquement, je souhaite que le script m'affiche :

"2 item(s)
http://www.site2.com/?toto&tata &"


Ca le fait chez moi, à condition que les & soient bien des &amp; (et
amp

point-virgule).

mais je n'ai pas du tout cela, et ca fait plusieurs heures que je me
penche dessus (meme la nuit qui est sensée porter conseille ne
marche


pas !)


Et ça fait quoi? Elle quelle version de perl tu utilises?

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/