Problème de transmission de fichier & d'encodage (CGI)

Le
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)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #2624641
À (at) Tue, 08 Apr 2008 17:47:12 +0200,
paul POULAIN
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 - Perl en français -
Nicolas George
Le #2624631
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
Le #2624621
À (at) 09 Apr 2008 07:52:44 GMT,
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.


Ce n'est pas à activer systématiquement : juste pour transmettre le
document en question.

L'autre possibilité, c'est de mettre STDOUT en mode 'raw' mais, dans
ce cas, il faut absolument maîtriser l'encodage de tout ce qu'on
écrit.

--
Paul Gaborit - Perl en français -

paul POULAIN
Le #2641461
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.
--
Paul

Paul Gaborit
Le #2644131
À (at) Wed, 09 Apr 2008 16:06:55 +0200,
paul POULAIN
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 - Perl en français -

Publicité
Poster une réponse
Anonyme