[Perl] Problème avec module Archive::Zip et UTF-8
Dominique Asselineau
asseline at telecom-paristech.fr
Jeu 11 Mai 17:29:58 CEST 2017
Olivier Mengué wrote on Thu, May 11, 2017 at 02:54:59AM +0200
> Le 10 mai 2017 à 17:43, Dominique Asselineau <asseline at telecom-paristech.fr>
> a écrit :
>
> >
> > Si j'ajoute dans l'archive zip un membre à partir d'une chaîne UTF-8
> > avec la méthode addString( $chaine, $nomDeMembre ), lorsqu'ensuite je
> > tente d'écrire cette archive à l'aide de la méthode writeToFileHandle,
> > dans un fichier temporaire produit par Archive::Zip::tempFile(),
> > j'obtiens l'erreur
> >
> > Wide character in Compress::Raw::Zlib::crc32 at
> > /usr/share/perl5/Archive/Zip.pm line 307.
> >
> > Comme indiqué dans le man de Archive::Zip, à la section "Archive::Zip
> > Global Variables", je positionne la variable "local
> > $Archive::Zip::UNICODE = 1;" juste avant l'appel à la méthode
> > addString mais ça ne convient pas.
> >
> > Je suppose que la variable $Archive::Zip::UNICODE = 1; devrait
> > permettre à addString d'encoder la chaîne Perl UTF-8 en octets qui ne
> > devraient pas poser problème lors de traitement suivant ?
> >
> >
> Pas du tout.
>
> La doc indique : « This variable governs how Unicode file and directory
> names are added to or extracted from an archive. »
>
> Or le problème que tu rencontre n'est pas sur les noms de fichiers mais sur
> le *contenu* de ces fichiers.
> Tu ne dois pas envoyer une chaîne Unicode comme contenu mais plutôt une
> chaîne d'octets (bytes) que tu aura proprement encodés à partir d'un chaîne
> Unicode. Utilise pour cela le module Encode.
merci. C'est ce que j'avais fait entre temps. À propos de la doc, si addString attend des octets plutôt
qu'une chaîne de caractères, il aurait paru plus clair de le préciser dans la syntaxe : addString( $Bytes, ... ).
dom
>
> use Encode 'encode';
> $zip->addString( encode('UTF-8', $string1), 'la-1re-chaine.txt' );
>
> Ton code corrigé est en pièce jointe.
>
> Olivier.
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
--
Plus d'informations sur la liste de diffusion Perl