Attention, c'est le fichier sur lequel tu écris qu'il faut ouvrir en UTF-8. Par exemple (en utilisant la balise PRE au lieu de CODE car cette dernière échappe les caractères trop exotiques
):
Taisha:~/perl/forum $ cat utf8.pl
use strict;
use warnings;
use utf8;
print "こんにちは\n";
Taisha:~/perl/forum $
J'ai utilisé ci-dessus le pragma use utf8; pour insérer des chaînes de caractères en UTF-8 dans mon source. A l'exécution
Taisha:~/perl/forum $ perl utf8.pl
Wide character in print at utf8.pl line 4.
こんにちは
Taisha:~/perl/forum $
on a un warning car STDOUT est ouvert par défaut en mode iso-8859-1 (aka latin-1, jeu de caractère standard de l'europe de l'ouest, limité à un octet par caractère, sachant qu'on veut écrire des caractères qui ne lui appartiennent pas...)
On peut s'en sortir ici en ajoutant l'option -CO dans la ligne de commande, qui force l'ouverture de STDOUT avec un encodage UTF-8 :
Taisha:~/perl/forum $ perl -CO utf8.pl
こんにちは
Taisha:~/perl/forum $
Dans ton cas, si $fh n'est pas ouvert avec un encodage particulier, essaie d'invoquer ton programme avec l'option -Co (attention, le o est ici en minuscules), qui va faire en sorte que les fichiers ouverts en écriture le soient par défaut avec un encodage UTF-8. ALternativement, tu peux le préciser toi-même lors de l'ouverture du fichier :
open my $fh, ">:encoding(UTF-8)", ...
Dans les deux cas, le fichier produit sera encodé en UTF-8.
Si le warning disparaît, cela signifiera qu'on a bien identifié le problème. Après, la suite à donner dépend de comment tu veux traiter le ou les caractères problématiques.
Partager