Comment puis-je sortie de l'UTF-8 à partir de Perl?
Je suis en train d'écrire un script Perl à l'aide de la "utf8" pragma, et j'obtiens des résultats inattendus. Je suis sous Mac OS X 10.5 (Leopard), et je suis en train de monter avec TextMate. Tous mes paramètres de mon éditeur et de son système d'exploitation par défaut, l'écriture de fichiers au format utf-8.
Cependant, quand j'ai entrez le texte suivant dans un fichier texte, l'enregistrer en tant que ".pl", et de l'exécuter, j'ai l'amicale "losange avec un point d'interrogation à la place des caractères non-ASCII.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
Une idée de ce que je fais mal? Je m'attends à obtenir 'Çirçös" dans la sortie, mais j'obtiens '�ir��s " à la place.
- C'est peut-être pas le programme .. je pense que votre shell oder votre éditeur qui fait la sortie
- Toutes les réponses répondre correctement à votre question de la manière de la définir explicitement à l'UTF8. Je pense que vous devriez être ajuster les paramètres régionaux de votre terminal comme indiqué dans le stackoverflow.com/a/14405949/498634. Le terminal pourrait ne pas être mise en UTF8, et les données écrites sur la sortie standard en UTF8 sera codé de manière incorrecte!
Vous devez vous connecter pour publier un commentaire.
use utf8;
ne permet pas Unicode sortie - il vous permet de type Unicode dans votre programme. Ajoutez à cela le programme, avant votreprint()
déclaration:Voir si cela aide. Que doit faire
STDOUT
sortie en UTF-8 au lieu ordinaire ASCII.Vous pouvez utiliser le ouvrir pragma.
Pour eg. ci-dessous définit STDOUT, STDIN & STDERR pour utiliser l'UTF-8....
TMTOWTDI, a choisi la méthode qui convient le mieux à votre façon de travailler. J'utilise l'environnement de la méthode donc je n'ai pas à y penser.
Dans le environnement:
sur le ligne de commande:
ou avec binmode:
ou avec PerlIO:
ou avec la ouvrir pragma:
-CSDL
a fonctionné pour moi oùbinmode
seul n'a pas.SDL
est implicite à la fois avec-C
etPERL_UNICODE
. Leuse open ':locale'
pragma est également à souligner, parce que c'est le script équivalent de-C
etexport PER_UNICODE=
. L'une de ces 3 vous donnera le support UTF8 pour toutes les entrées et les flux de sortie (si les fichiers ou stdin/stdout/stderr), en supposant que votre environnement locale de l'est de l'utf-8-basé. Enfin, à traiter également source code UTF8, utilisez leuse utf8;
pragma.perl -Mutf8 -CSDL -e '...'
permet de consommer/sortie UTF-8 dans que l'utilisation de l'UTF-8 littéraux à l'intérieur de-e
par exemple, pour un pauvre homme d'un dossier de cas:perl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Vous aussi vous voulez dire, que les chaînes de caractères dans votre code utf-8. Voir Pourquoi n'moderne Perl éviter UTF-8 par défaut?. Donc, non seulement
PERL_UNICODE=SDAL
mais aussiPERL5OPT=-Mutf8
.Grâce, a finalement obtenu une solution à ne pas le mettre en utf8::encode tous les cours de code.
Pour synthétiser et compléter pour les autres cas, comme celui d'écrire et de lire des fichiers en utf8 et travaille également avec LoadFile d'un fichier YAML en utf8
où cache.yaml est:
faire dans votre shell:
$ env |grep LANG
Ce sera probablement montrer que votre shell n'est pas à l'aide d'une locale utf-8.