Problème de transmission de fichier & d'encodage (CGI)
5 réponses
paul POULAIN
Hello,
J'ai un script Perl qui permet de transmettre (via apache) un fichier au
format iso2709. (C'est un format semi-binaire de bibliothécaire : des trucs
en clair et des trucs en binaire)
Si je fais :
my $query = new CGI;
print $query->header( -type => 'application/octet-stream',
-charset => 'utf-8',
-attachment=>$filename);
print $record->as_usmarc();
et ben mon fichier il arrive daubé, et tous les caractères accentués en utf8
sont transformés en latin1
Alors que la commande :
open (FILE,">:utf8","/home/paul/Desktop/test.mrc");
print FILE $record->as_usmarc();
me donne un fichier correct.
Si quelqu'un a une piste, je cherche depuis 2H et je sèche complet...
Pour info :
Pour autant que je le sache, j'ai
AddDefaultCharset utf8
dans la config d'Apache
PS : dans les trucs en binaire, il y a notamment la position et la longueur
des trucs en clair dans le fichier. La transformation des accents de 2
octets (utf8) en 1 octet (latin1) fait que tout le reste foire dans les
grandes largeurs et que je ne peux plus décoder le fichier correctement.
(vive le XML, mais l'iso2709 est un format qui doit bien avoir ses 25
ans...)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Tue, 08 Apr 2008 17:47:12 +0200, paul POULAIN écrivait (wrote):
J'ai un script Perl qui permet de transmettre (via apache) un fichier au format iso2709. (C'est un format semi-binaire de bibliothécaire : des trucs en clair et des trucs en binaire)
Si je fais : my $query = new CGI; print $query->header( -type => 'application/octet-stream', -charset => 'utf-8', -attachment=>$filename);
Ok. Donc le navigateur a l'autre bout se dira que le document est en 'utf-8' (je ne suis pas certain que cela ait une importance quelconque pour le type 'application/octet-stream'... mais peu importe).
print $record->as_usmarc(); et ben mon fichier il arrive daubé, et tous les caractères accentués en utf8 sont transformés en latin1
Normal : la sortie standard (STDOUT) n'est certainement pas configurée pour produire de l'UTF-8.
Alors que la commande :
open (FILE,">:utf8","/home/paul/Desktop/test.mrc"); print FILE $record->as_usmarc(); me donne un fichier correct.
Normal.
Si quelqu'un a une piste, je cherche depuis 2H et je sèche complet...
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 08 Apr 2008 17:47:12 +0200,
paul POULAIN <paul.poulain_nospam@free.fr.invalid> écrivait (wrote):
J'ai un script Perl qui permet de transmettre (via apache) un fichier au
format iso2709. (C'est un format semi-binaire de bibliothécaire : des trucs
en clair et des trucs en binaire)
Si je fais :
my $query = new CGI;
print $query->header( -type => 'application/octet-stream',
-charset => 'utf-8',
-attachment=>$filename);
Ok. Donc le navigateur a l'autre bout se dira que le document est en
'utf-8' (je ne suis pas certain que cela ait une importance quelconque
pour le type 'application/octet-stream'... mais peu importe).
print $record->as_usmarc();
et ben mon fichier il arrive daubé, et tous les caractères accentués en utf8
sont transformés en latin1
Normal : la sortie standard (STDOUT) n'est certainement pas configurée
pour produire de l'UTF-8.
Alors que la commande :
open (FILE,">:utf8","/home/paul/Desktop/test.mrc");
print FILE $record->as_usmarc();
me donne un fichier correct.
Normal.
Si quelqu'un a une piste, je cherche depuis 2H et je sèche complet...
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 08 Apr 2008 17:47:12 +0200, paul POULAIN écrivait (wrote):
J'ai un script Perl qui permet de transmettre (via apache) un fichier au format iso2709. (C'est un format semi-binaire de bibliothécaire : des trucs en clair et des trucs en binaire)
Si je fais : my $query = new CGI; print $query->header( -type => 'application/octet-stream', -charset => 'utf-8', -attachment=>$filename);
Ok. Donc le navigateur a l'autre bout se dira que le document est en 'utf-8' (je ne suis pas certain que cela ait une importance quelconque pour le type 'application/octet-stream'... mais peu importe).
print $record->as_usmarc(); et ben mon fichier il arrive daubé, et tous les caractères accentués en utf8 sont transformés en latin1
Normal : la sortie standard (STDOUT) n'est certainement pas configurée pour produire de l'UTF-8.
Alors que la commande :
open (FILE,">:utf8","/home/paul/Desktop/test.mrc"); print FILE $record->as_usmarc(); me donne un fichier correct.
Normal.
Si quelqu'un a une piste, je cherche depuis 2H et je sèche complet...
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nicolas George
Paul Gaborit wrote in message :
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
Ça va faire échouer tout ce qui est transmis en données binaires.
Paul Gaborit wrote in message <wt9abk3tqzz.fsf@marceau.enstimac.fr>:
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
Ça va faire échouer tout ce qui est transmis en données binaires.
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8"; Saint Gaborit et Saint Lhullier (sur une liste de discussion Perl) ont la
même idée... qui est la bonne. -- Paul
Paul Gaborit
À (at) Wed, 09 Apr 2008 16:06:55 +0200, paul POULAIN écrivait (wrote):
Paul Gaborit wrote:
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8"; Saint Gaborit et Saint Lhullier (sur une liste de discussion Perl) ont la
même idée... qui est la bonne.
Merci pour le "saint"... si c'était vrai ! ;-)
Ceci étant, la remarque de Nicolas George était tout à fait pertinente : il ne faut pas nécessairement laisser ce réglage de manière permanente. Surtout s'il y a d'autres informations (dans un autre encodage) envoyées via ce script et encore plus si il doit être utilisé via mod_perl !
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 09 Apr 2008 16:06:55 +0200,
paul POULAIN <paul.poulain_nospam@free.fr.invalid> écrivait (wrote):
Paul Gaborit wrote:
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8";
Saint Gaborit et Saint Lhullier (sur une liste de discussion Perl) ont la
même idée... qui est la bonne.
Merci pour le "saint"... si c'était vrai ! ;-)
Ceci étant, la remarque de Nicolas George était tout à fait
pertinente : il ne faut pas nécessairement laisser ce réglage de
manière permanente. Surtout s'il y a d'autres informations (dans un
autre encodage) envoyées via ce script et encore plus si il doit être
utilisé via mod_perl !
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 09 Apr 2008 16:06:55 +0200, paul POULAIN écrivait (wrote):
Paul Gaborit wrote:
Il suffit d'indiquer à Perl que STDOUT est en UTF-8 :
binmode STDOUT, ":utf8"; Saint Gaborit et Saint Lhullier (sur une liste de discussion Perl) ont la
même idée... qui est la bonne.
Merci pour le "saint"... si c'était vrai ! ;-)
Ceci étant, la remarque de Nicolas George était tout à fait pertinente : il ne faut pas nécessairement laisser ce réglage de manière permanente. Surtout s'il y a d'autres informations (dans un autre encodage) envoyées via ce script et encore plus si il doit être utilisé via mod_perl !
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>