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

virgule en l'air, Perl en galère...

16 réponses
Avatar
Paul
Bonjour =E0 tous...

Si je vous dis que j'ai un autre probl=E8me, vous me croyez ? :-)

Bon, cette fois ci, cela concerne Perl et xml.
En fait, parfois j'ai des fichiers xml qui contiennent le caract=E8re
', (un genre d'apostrophe, ou plut=F4t : une virgule en haut) mais le
parseur XML de Perl (XML::Simple) n'accepte pas du tout cela et fait
"tout planter".

Sachant que ces contenus xml sont des fils RSS et que je n'ai donc pas
la possibilit=E9 de les g=E9rer, comment dois-je m'y prendre pour =E9viter
ce probl=E8me ?

Merci =E0 tous.

10 réponses

1 2
Avatar
Paul Gaborit
À (at) 30 Nov 2005 07:02:24 -0800,
"Paul" écrivait (wrote):
Bon, cette fois ci, cela concerne Perl et xml.
En fait, parfois j'ai des fichiers xml qui contiennent le caractère
', (un genre d'apostrophe, ou plutôt : une virgule en haut) mais le
parseur XML de Perl (XML::Simple) n'accepte pas du tout cela et fait
"tout planter".


À première vue, cela ressemble à un problème d'encodage. Êtes-vous sûr
que le codage que vous déclarez en entrée correspond à celui du
document (normalement c'est détecté automagiquement puisque déclaré au
début du fichier XML) et que votre codage de sortie autorise ce
caractère ?

Que voulez-vous dire par "XML::Simple fait tout planter" ? Perl
s'arrête brutalement ou c'est XML::Simple qui génère une erreur ? Dans
tous les cas, quel est le message d'erreur ?

Sachant que ces contenus xml sont des fils RSS et que je n'ai donc pas
la possibilité de les gérer, comment dois-je m'y prendre pour éviter
ce problème ?


Indiquez-nous un exemple de fil RSS qui présente ce problème...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Paul
Ah, ben, oui, ca doit être cela le problème... car moi, je fais tout
en UTF-8 et le RSS est en ISO-8859-1
exemple :
http://www.internetactu.net/wp-rss2.php

Bon, on à le problème, maintenant, reste à trouver la solution,
parce que, moi, c'est pas automagique : il n'a pas l'aire de détecter
que c'est de l'iso, et comme je force l'écriture de mes fichiers en
utf-8 : il aime pas...

Je fais comme ceci :
open (FichierLocal, ">>UTF-8", $file);

Donc, pour résumer, et si je comprends bien :
il faudrait que mon script encode le fil RSS en utf-8 et ensuite je
pourrais écrire mes propres xml en local en utf-8 ?

Merci
Avatar
Michel Rodriguez
Paul wrote:
Ah, ben, oui, ca doit être cela le problème... car moi, je fais tout
en UTF-8 et le RSS est en ISO-8859-1
exemple :
http://www.internetactu.net/wp-rss2.php

Bon, on à le problème, maintenant, reste à trouver la solution,
parce que, moi, c'est pas automagique : il n'a pas l'aire de détecter
que c'est de l'iso, et comme je force l'écriture de mes fichiers en
utf-8 : il aime pas...

Je fais comme ceci :
open (FichierLocal, ">>UTF-8", $file);

Donc, pour résumer, et si je comprends bien :
il faudrait que mon script encode le fil RSS en utf-8 et ensuite je
pourrais écrire mes propres xml en local en utf-8 ?


Bon, je me rapelle plus du de l'encodage par default de RSS, mais en
tout cas, en HTML c'est ISO-8859-1, donc le RSS doit etre OK en fait.

Mais bon, le parser XML de XML::Simple (ou n'importe quel autre
d'ailleurs), lui, prends un entree par default en UTF-8 (ou 16 si ca
ressemble a de l'UTF-16).

Tu as plusieurs options:

- convertir ton ISO-8859-1 en UTF-8 avant de le traiter, iconv fait ca,
ou tu peux peut-etre ouvrir le fichier en precisant qu'il est en
ISO... et passer le filehandle a XML::Simple qui se debrouille (j'ai
jamais essaye mais ca peut marcher),

- ajouter la declaration XML qui va bieng en tete de ton fichier, y
compris a la volee, ou en chargeant le fichier et en le concatenant
a la declaration (<?xml version="1.0" encoding="ISO-8859-1"?>)

- si tu te sents d'humeur aventureuse, et que tu utilise XML::Parser
sous XML::Simple, ParserOpts peut t'aider

mais bon, je cite:

ParserOpts => [ XML::Parser Options ] # in - don't use this

Note: This option is now officially deprecated. If you find it
useful, email the author with an example of what you use it for.
Do not use this option to set the ProtocolEncoding, that's just
plain wrong - fix the XML. (paragraphe souligné dans la doc!)

This option allows you to pass parameters to the constructor of
the underlying XML::Parser object (which of course assumes you're
not using SAX).

Voila,

Ca t'aide?

--
mirod

Avatar
Nicolas George
Michel Rodriguez wrote in message
<438edf73$0$327$:
Bon, je me rapelle plus du de l'encodage par default de RSS, mais en
tout cas, en HTML c'est ISO-8859-1, donc le RSS doit etre OK en fait.


Le XML a pour encodage par défaut UTF-8 (ou cette merde d'UTF-16 en présence
d'une byte-order-mark). Le RSS est du XML.

Avatar
Paul Gaborit
À (at) Thu, 1 Dec 2005 14:20:06 +0000 (UTC),
Nicolas George <nicolas$ écrivait (wrote):
Michel Rodriguez wrote in message
<438edf73$0$327$:
Bon, je me rapelle plus du de l'encodage par default de RSS, mais en
tout cas, en HTML c'est ISO-8859-1, donc le RSS doit etre OK en fait.


Le XML a pour encodage par défaut UTF-8 (ou cette merde d'UTF-16 en présence
d'une byte-order-mark). Le RSS est du XML.


Par défaut. oui.
Mais là, le fil RSS commence par :

<?xml version="1.0" encoding="iso-8859-1"?>

Et le serveur Web dans sa réponse HTTP indique bien :

Content-Type: text/xml; charset=iso-8859-1

Il est donc bien encodé en iso-8859-1. Tout cela est correct.

XML::Simple (ou plutôt les parseurs qu'il utilise) gère bien cette
situation et devrait fournir un résultat correct.

Le bug doit être ailleurs.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Thierry Boudet
On 2005-12-01, Paul Gaborit wrote:

Il est donc bien encodé en iso-8859-1. Tout cela est correct.

Le bug doit être ailleurs.

Peut-être que la "virgule en l'air" cité dans le sujet

est l'apostrophe à-la-windows, qui ne fait pas parti
de l'iso8859-1 ?

--
- définir ce que veut dire "technologiquement mort"
Plus utilisé. Pickabilisé si tu préfères.

-- fcol.debats, sept 2005 --

Avatar
Nicolas George
Thierry Boudet wrote in message :
Peut-être que la "virgule en l'air" cité dans le sujet
est l'apostrophe à-la-windows, qui ne fait pas parti
de l'iso8859-1 ?


Possible. Cependant, s'il y a ça, c'est probablement que le codage réel est
windows-1252, et dans ce cas, le code qui représente la fameuse virgule en
l'air est un code iso-8859-1 valide, même s'il représente un code de
contrôle.

Avatar
Paul Gaborit
À (at) 01 Dec 2005 15:55:53 GMT,
Thierry Boudet écrivait (wrote):
On 2005-12-01, Paul Gaborit wrote:

Il est donc bien encodé en iso-8859-1. Tout cela est correct.

Le bug doit être ailleurs.

Peut-être que la "virgule en l'air" cité dans le sujet

est l'apostrophe à-la-windows, qui ne fait pas parti
de l'iso8859-1 ?


En iso-8859-1, à ma connaissance, il n'existe aucune valeur
invalide. Donc, au pire, il y aurait juste un autre caractère à la
place de l'apostrophe.

En fait, on discute un peu dans le vide car on ne connait toujours pas
le symptôme de l'erreur...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Paul
En fait, on discute un peu dans le vide car on ne connait toujours pas
le symptôme de l'erreur...


Je vais essayer de préciser :

je récupere donc le XML du fil RSS, et je lui fait quelques
traitements...
ensuite je cré un fichier xml local issu de ce traitement et qui
contient donc les caractère iso du RSS source.
C'est ensuite quand mon script perl doit lire mon xml local, il me
retourne ce message d'erreur :
Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436

En espérant avoir donné des informations qui aideront à mieux
comprendre ce qui se passe...
NB : faut aussi envisager que l'erreur viens de moi !!

Avatar
Thierry Boudet
On 2005-12-01, Paul wrote:

C'est ensuite quand mon script perl doit lire mon xml local, il me
^^^^

retourne ce message d'erreur :
Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436
^^^^^


mmmm...

--
Tsss, tss. La mondial a été un peu sacrifiée au niveau de la ligne, mais
il y a 4 places, il faut ce qu'il faut. La Dino est magnifique, elle est
d'une vulgarité italienne indépassable . C'est une très belle Ferrari,
dessinée pour des cons d'américains qui n'y ont rien compris.

1 2