[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