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 ?
syswrite : ben après je fais un autre xml issu du premier...
notez que j'utilise pas de librairie pour écrire mes fichiers xml... je fais un simple : open (FichierLocal, ">>:utf8", $file);
Paul Gaborit
À (at) 1 Dec 2005 09:37:56 -0800, "Paul" écrivait (wrote):
syswrite : ben après je fais un autre xml issu du premier...
notez que j'utilise pas de librairie pour écrire mes fichiers xml... je fais un simple : open (FichierLocal, ">>:utf8", $file);
Si le fichier résultat contient un "Wide character", c'est que vous l'avez écrit... Le bug doit se manifester à ce moment-là (lors de l'écriture) et non lors de la lecture.
Il n'est pas très difficile de tracer le contenu du texte écrit lorsque le bug se manifeste (*) et d'essayer de comprendre d'ou vient ce contenu...
Ce que je ne comprends pas, c'est pourquoi les parseurs XML crie avec le fichier RSS fourni alors que les convertisseurs iso-8859-1<->utf-8 ne disent rien...
(*) Par exemple en plaçant cela au début du script :
use Carp qw/confess/; SIG{__DIE__} = sub {confess @_};
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 1 Dec 2005 09:37:56 -0800,
"Paul" <ernond_paul@yahoo.fr> écrivait (wrote):
syswrite : ben après je fais un autre xml issu du premier...
notez que j'utilise pas de librairie pour écrire mes fichiers xml...
je fais un simple :
open (FichierLocal, ">>:utf8", $file);
Si le fichier résultat contient un "Wide character", c'est que vous
l'avez écrit... Le bug doit se manifester à ce moment-là (lors de
l'écriture) et non lors de la lecture.
Il n'est pas très difficile de tracer le contenu du texte écrit
lorsque le bug se manifeste (*) et d'essayer de comprendre d'ou vient
ce contenu...
Ce que je ne comprends pas, c'est pourquoi les parseurs XML crie avec
le fichier RSS fourni alors que les convertisseurs iso-8859-1<->utf-8
ne disent rien...
(*) Par exemple en plaçant cela au début du script :
use Carp qw/confess/;
SIG{__DIE__} = sub {confess @_};
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 1 Dec 2005 09:37:56 -0800, "Paul" écrivait (wrote):
syswrite : ben après je fais un autre xml issu du premier...
notez que j'utilise pas de librairie pour écrire mes fichiers xml... je fais un simple : open (FichierLocal, ">>:utf8", $file);
Si le fichier résultat contient un "Wide character", c'est que vous l'avez écrit... Le bug doit se manifester à ce moment-là (lors de l'écriture) et non lors de la lecture.
Il n'est pas très difficile de tracer le contenu du texte écrit lorsque le bug se manifeste (*) et d'essayer de comprendre d'ou vient ce contenu...
Ce que je ne comprends pas, c'est pourquoi les parseurs XML crie avec le fichier RSS fourni alors que les convertisseurs iso-8859-1<->utf-8 ne disent rien...
(*) Par exemple en plaçant cela au début du script :
use Carp qw/confess/; SIG{__DIE__} = sub {confess @_};
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Paul
J'ai donc mis ces deux lignes au début de mon script, et j'ai simplement ajouté un $ devant SIG... :-)
use Carp qw/confess/; SIG{__DIE__} = sub {confess @_};
Il ne reste plus qu'a attendre qu'un flux rss me pose probleme. je vous tiens au courant... car ca peut durer un bon moment. :-)
En attendant, je vais aller me renseigner sur ce "confess", car j'avoue l'avoir betement ajouté dans mon script sans savoir ce qu'il faisait...
J'ai donc mis ces deux lignes au début de mon script,
et j'ai simplement ajouté un $ devant SIG... :-)
use Carp qw/confess/;
SIG{__DIE__} = sub {confess @_};
Il ne reste plus qu'a attendre qu'un flux rss me pose probleme. je vous
tiens au courant... car ca peut durer un bon moment. :-)
En attendant, je vais aller me renseigner sur ce "confess", car j'avoue
l'avoir betement ajouté dans mon script sans savoir ce qu'il
faisait...
J'ai donc mis ces deux lignes au début de mon script, et j'ai simplement ajouté un $ devant SIG... :-)
use Carp qw/confess/; SIG{__DIE__} = sub {confess @_};
Il ne reste plus qu'a attendre qu'un flux rss me pose probleme. je vous tiens au courant... car ca peut durer un bon moment. :-)
En attendant, je vais aller me renseigner sur ce "confess", car j'avoue l'avoir betement ajouté dans mon script sans savoir ce qu'il faisait...
Paul
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide... Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436. at ic5.pl line 12 main::__ANON__('Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm ...') called at /usr/share/perl/5.8/Net/Cmd.pm line 436 Net::Cmd::datasend('undef', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722 MIME::Lite::SMTP::print('MIME::Lite::SMTP=GLOB(0xd79722c)', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2159 MIME::Lite::print_simple_body('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2115 MIME::Lite::print_body('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2035 MIME::Lite::print('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2100 MIME::Lite::print_body('MIME::Lite=HASH(0x8cb264c)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2058 MIME::Lite::print_for_smtp('MIME::Lite=HASH(0x8cb264c)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2635 MIME::Lite::send_by_smtp('MIME::Lite=HASH(0x8cb264c)', 'smtp.free.fr', 'Timeout', 60) called at /usr/share/perl5/MIME/Lite.pm line 2454 MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp', 'smtp.free.fr', 'Timeout', 60) called at user.pm line 315 eval {...} called at user.pm line 315 user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)') called at ic5.pl line 183
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il n'aime pas ma "virgule en l'air"...
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet
de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide...
Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436.
at ic5.pl line 12
main::__ANON__('Wide character in syswrite at
/usr/share/perl/5.8/Net/Cmd.pm ...') called at
/usr/share/perl/5.8/Net/Cmd.pm line 436
Net::Cmd::datasend('undef', '<H1>généré
par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722
MIME::Lite::SMTP::print('MIME::Lite::SMTP=GLOB(0xd79722c)',
'<H1>généré par ...') called at
/usr/share/perl5/MIME/Lite.pm line 2159
MIME::Lite::print_simple_body('MIME::Lite=HASH(0xd7bbb14)',
'MIME::Lite::SMTP=GLOB(0xd79722c)') called at
/usr/share/perl5/MIME/Lite.pm line 2115
MIME::Lite::print_body('MIME::Lite=HASH(0xd7bbb14)',
'MIME::Lite::SMTP=GLOB(0xd79722c)') called at
/usr/share/perl5/MIME/Lite.pm line 2035
MIME::Lite::print('MIME::Lite=HASH(0xd7bbb14)',
'MIME::Lite::SMTP=GLOB(0xd79722c)') called at
/usr/share/perl5/MIME/Lite.pm line 2100
MIME::Lite::print_body('MIME::Lite=HASH(0x8cb264c)',
'MIME::Lite::SMTP=GLOB(0xd79722c)') called at
/usr/share/perl5/MIME/Lite.pm line 2058
MIME::Lite::print_for_smtp('MIME::Lite=HASH(0x8cb264c)',
'MIME::Lite::SMTP=GLOB(0xd79722c)') called at
/usr/share/perl5/MIME/Lite.pm line 2635
MIME::Lite::send_by_smtp('MIME::Lite=HASH(0x8cb264c)',
'smtp.free.fr', 'Timeout', 60) called at /usr/share/perl5/MIME/Lite.pm
line 2454
MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp',
'smtp.free.fr', 'Timeout', 60) called at user.pm line 315
eval {...} called at user.pm line 315
user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)')
called at ic5.pl line 183
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il
n'aime pas ma "virgule en l'air"...
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide... Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436. at ic5.pl line 12 main::__ANON__('Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm ...') called at /usr/share/perl/5.8/Net/Cmd.pm line 436 Net::Cmd::datasend('undef', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722 MIME::Lite::SMTP::print('MIME::Lite::SMTP=GLOB(0xd79722c)', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2159 MIME::Lite::print_simple_body('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2115 MIME::Lite::print_body('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2035 MIME::Lite::print('MIME::Lite=HASH(0xd7bbb14)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2100 MIME::Lite::print_body('MIME::Lite=HASH(0x8cb264c)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2058 MIME::Lite::print_for_smtp('MIME::Lite=HASH(0x8cb264c)', 'MIME::Lite::SMTP=GLOB(0xd79722c)') called at /usr/share/perl5/MIME/Lite.pm line 2635 MIME::Lite::send_by_smtp('MIME::Lite=HASH(0x8cb264c)', 'smtp.free.fr', 'Timeout', 60) called at /usr/share/perl5/MIME/Lite.pm line 2454 MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp', 'smtp.free.fr', 'Timeout', 60) called at user.pm line 315 eval {...} called at user.pm line 315 user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)') called at ic5.pl line 183
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il n'aime pas ma "virgule en l'air"...
Paul Gaborit
À (at) 3 Dec 2005 07:33:17 -0800, "Paul" écrivait (wrote):
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide... Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436. at ic5.pl line 12 main::__ANON__('Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm ...') called at /usr/share/perl/5.8/Net/Cmd.pm line 436 Net::Cmd::datasend('undef', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722 [...]
MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp', 'smtp.free.fr', 'Timeout', 60) called at user.pm line 315 eval {...} called at user.pm line 315 user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)') called at ic5.pl line 183
'confess' permet effectivement d'afficher la pile compléte des appels de fonctions. C'est assez pratique. ;-)
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il n'aime pas ma "virgule en l'air"...
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail qui devrait être en utf-8 et qui contient (au moins) un caractère illégal.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 3 Dec 2005 07:33:17 -0800,
"Paul" <ernond_paul@yahoo.fr> écrivait (wrote):
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet
de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide...
Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436.
at ic5.pl line 12
main::__ANON__('Wide character in syswrite at
/usr/share/perl/5.8/Net/Cmd.pm ...') called at
/usr/share/perl/5.8/Net/Cmd.pm line 436
Net::Cmd::datasend('undef', '<H1>généré
par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722
[...]
MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp',
'smtp.free.fr', 'Timeout', 60) called at user.pm line 315
eval {...} called at user.pm line 315
user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)')
called at ic5.pl line 183
'confess' permet effectivement d'afficher la pile compléte des appels
de fonctions. C'est assez pratique. ;-)
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il
n'aime pas ma "virgule en l'air"...
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail
qui devrait être en utf-8 et qui contient (au moins) un caractère
illégal.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 3 Dec 2005 07:33:17 -0800, "Paul" écrivait (wrote):
Voilà, l'erreur est arrivée. et donc, je comprends vraiment l'interet de Carp qw/confess/; !!!
voici ce qui s'affiche maintenant, et ca aide... Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm line 436. at ic5.pl line 12 main::__ANON__('Wide character in syswrite at /usr/share/perl/5.8/Net/Cmd.pm ...') called at /usr/share/perl/5.8/Net/Cmd.pm line 436 Net::Cmd::datasend('undef', '<H1>généré par ...') called at /usr/share/perl5/MIME/Lite.pm line 2722 [...]
MIME::Lite::send('MIME::Lite=HASH(0x8cb264c)', 'smtp', 'smtp.free.fr', 'Timeout', 60) called at user.pm line 315 eval {...} called at user.pm line 315 user::sendReport('user=HASH(0xd881838)', 'HASH(0x88227c8)') called at ic5.pl line 183
'confess' permet effectivement d'afficher la pile compléte des appels de fonctions. C'est assez pratique. ;-)
Donc, si je comprends bien, c'est lors de l'envoie par mail qu'il n'aime pas ma "virgule en l'air"...
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail qui devrait être en utf-8 et qui contient (au moins) un caractère illégal.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Paul
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail qui devrait être en utf-8 et qui contient (au moins) un caractère illégal.
Certains fleurtent souvent dans l'illégalité.... j'espere ne pas en faire partie... :-)
pour résumer : 1. je prends le fil RSS exmple : http://www.internetactu.net/?feed=rss2 2. je récupère le titre 3. je créé un fichier local au format xml avec une entete utf-8 et le fichier est créé en vrai utf-8 ; le parseur xml::simple récupère bien le titre (qui contient le caractère illégal), et j'arrive à écrire correctement le fichier local. 4. j'envoie (je tente d'envoyer) le mail avec un contenu extrait depuis les eléments du fichier xml : je récupère chaque titres et chaque description que j'avais auparavant écrite dans cet xml local. 5. c'est là que ca coince, MIME::Lite n'aime pas le caractere "illégal" :-)
Bon, j'espere que je vais finir par m'en sortir avec ce pztit soucis... c'est vraiment un truc pas tres cool quand meme...
Merci à tous ceux qui m'aident. :-)
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail
qui devrait être en utf-8 et qui contient (au moins) un caractère
illégal.
Certains fleurtent souvent dans l'illégalité.... j'espere ne pas en
faire partie... :-)
pour résumer :
1. je prends le fil RSS exmple :
http://www.internetactu.net/?feed=rss2
2. je récupère le titre
3. je créé un fichier local au format xml avec une entete utf-8 et
le fichier est créé en vrai utf-8 ; le parseur xml::simple récupère
bien le titre (qui contient le caractère illégal), et j'arrive à
écrire correctement le fichier local.
4. j'envoie (je tente d'envoyer) le mail avec un contenu extrait
depuis les eléments du fichier xml : je récupère chaque titres et
chaque description que j'avais auparavant écrite dans cet xml local.
5. c'est là que ca coince, MIME::Lite n'aime pas le caractere
"illégal" :-)
Bon, j'espere que je vais finir par m'en sortir avec ce pztit soucis...
c'est vraiment un truc pas tres cool quand meme...
Ce qu'il faudrait comprendre, c'est d'où vient le contenu de ce mail qui devrait être en utf-8 et qui contient (au moins) un caractère illégal.
Certains fleurtent souvent dans l'illégalité.... j'espere ne pas en faire partie... :-)
pour résumer : 1. je prends le fil RSS exmple : http://www.internetactu.net/?feed=rss2 2. je récupère le titre 3. je créé un fichier local au format xml avec une entete utf-8 et le fichier est créé en vrai utf-8 ; le parseur xml::simple récupère bien le titre (qui contient le caractère illégal), et j'arrive à écrire correctement le fichier local. 4. j'envoie (je tente d'envoyer) le mail avec un contenu extrait depuis les eléments du fichier xml : je récupère chaque titres et chaque description que j'avais auparavant écrite dans cet xml local. 5. c'est là que ca coince, MIME::Lite n'aime pas le caractere "illégal" :-)
Bon, j'espere que je vais finir par m'en sortir avec ce pztit soucis... c'est vraiment un truc pas tres cool quand meme...