Je veux lire UTF-8 entrée en Perl, peu importe si il s'agit de l'entrée standard ou à partir d'un fichier, à l'aide de l'opérateur diamant: while(<>){...}
.
Donc mon script doit être appelée dans ces deux voies, comme d'habitude, en donnant le même résultat:
./script.pl utf8.txt
cat utf8.txt | ./script.pl
Mais les sorties diffèrent! Seulement le deuxième appel (à l'aide d' cat
) semble fonctionner comme prévu, la lecture correctement l'UTF-8. Voici le script:
#!/usr/bin/perl -w
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>){
my @chars = split //, $_;
print "$_\n" foreach(@chars);
}
Comment puis-je faire lire UTF-8 correctement dans les deux cas? Je voudrais continuer à utiliser le diamant de l'opérateur <>
pour la lecture, si possible.
EDIT:
J'ai réalisé que je devrais probablement décrire les différentes sorties. Mon fichier d'entrée contient cette séquence: a\xCA\xA7b
. La méthode avec cat
correctement les résultats:
a
\xCA\xA7
b
Mais l'autre méthode me donne ceci:
a
\xC3\x8A
\xC2\xA7
b