J'essaye d'écrire un script Perl en utilisant le pragma "utf8" et j'obtiens des résultats inattendus. J'utilise Mac OS X 10.5 (Leopard) et j'édite avec TextMate. Tous mes paramètres pour mon éditeur et mon système d'exploitation sont définis par défaut sur l'écriture de fichiers au format utf-8.
Cependant, lorsque j'entre ce qui suit dans un fichier texte, que je l'enregistre en tant que ".pl" et que je l'exécute, j'obtiens le sympathique "diamant 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 à avoir 'Çirçös' dans la sortie, mais j'obtiens à la place ' ir s'.
utf8
:Réponses:
use utf8;
n'active pas la sortie Unicode - il vous permet de taper Unicode dans votre programme. Ajoutez ceci au programme, avant votreprint()
déclaration:Voyez si cela aide. Cela devrait produire une
STDOUT
sortie en UTF-8 au lieu de l'ASCII ordinaire.la source
Vous pouvez utiliser le pragma ouvert .
Pour par exemple. ci-dessous définit STDOUT, STDIN & STDERR pour utiliser UTF-8 ....
la source
TMTOWTDI , a choisi la méthode qui correspond le mieux à votre façon de travailler. J'utilise la méthode de l'environnement pour ne pas avoir à y penser.
Dans l' environnement :
sur la ligne de commande :
ou avec binmode :
ou avec PerlIO :
ou avec le pragma ouvert :
la source
SDL
est implicite à la fois avec-C
etPERL_UNICODE
. Leuse open ':locale'
pragma mérite également d'être mentionné, car il est l'équivalent dans le script de-C
etexport PER_UNICODE=
. Chacun de ces 3 vous donnera le support UTF8 pour tous les flux d'entrée et de sortie (qu'il s'agisse de fichiers ou de stdin / stdout / stderr), en supposant que les paramètres régionaux de votre environnement sont basés sur UTF8. Enfin, pour traiter également le code source comme UTF8, utilisez leuse utf8;
pragma.perl -Mutf8 -CSDL -e '...'
permet de consommer / sortir UTF-8 ainsi que d'utiliser des littéraux UTF-8 à l'intérieur,-e
par exemple pour le dossier d'un pauvre homme:perl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Vous voulez également dire que les chaînes de votre code sont utf-8. Voir Pourquoi Perl moderne évite-t-il UTF-8 par défaut? . Alors défini non seulement
PERL_UNICODE=SDAL
mais aussiPERL5OPT=-Mutf8
.la source
Merci, enfin obtenu une solution pour ne pas mettre utf8 :: encoder partout dans le code. Pour synthétiser et compléter pour d'autres cas, comme écrire et lire des fichiers dans utf8 et fonctionne également avec LoadFile d'un fichier YAML dans utf8
où cache.yaml est:
la source
faire dans votre shell: $ env | grep LANG
Cela montrera probablement que votre shell n'utilise pas de paramètres régionaux utf-8.
la source