Estoy intentando escribir un script en Perl usando el pragma "utf8" y obtengo resultados inesperados. Estoy usando Mac OS X 10.5 (Leopard) y estoy editando con TextMate. Todas mis configuraciones tanto para mi editor como para mi sistema operativo están predeterminadas para escribir archivos en formato utf-8.
Sin embargo, cuando ingreso lo siguiente en un archivo de texto, lo guardo como ".pl" y lo ejecuto, obtengo el "diamante con un signo de interrogación" descriptivo en lugar de los caracteres que no son ASCII.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
¿Alguna idea de lo que estoy haciendo mal? Espero obtener 'Çirçös' en la salida, pero obtengo ' ir s' en su lugar.
utf8
:Respuestas:
use utf8;
no habilita la salida Unicode - le permite escribir Unicode en su programa. Agregue esto al programa, antes de suprint()
declaración:Vea si eso ayuda. Eso debería
STDOUT
generar una salida en UTF-8 en lugar de ASCII ordinario.fuente
Puede utilizar el pragma abierto .
Por ej. a continuación establece STDOUT, STDIN y STDERR para usar UTF-8 ....
fuente
TMTOWTDI , eligió el método que mejor se adapta a su forma de trabajar. Utilizo el método del entorno para no tener que pensar en ello.
En el medio ambiente :
en la línea de comando :
o con binmode :
o con PerlIO :
o con el pragma abierto :
fuente
SDL
está implícito con-C
yPERL_UNICODE
. Eluse open ':locale'
pragma es también digno de mención, ya que es el equivalente en la escritura de-C
yexport PER_UNICODE=
. Cualquiera de estos 3 le dará soporte UTF8 para todos los flujos de entrada y salida (ya sean archivos o stdin / stdout / stderr), asumiendo que la configuración regional de su entorno está basada en UTF8. Finalmente, para tratar también el código fuente como UTF8, useuse utf8;
pragma.perl -Mutf8 -CSDL -e '...'
permite consumir / generar UTF-8 , así como usar literales UTF-8 dentro,-e
por ejemplo, para la carpeta del caso de un pobre:perl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
También quiere decir que las cadenas de su código son utf-8. Consulte ¿Por qué el Perl moderno evita UTF-8 de forma predeterminada? . Así que establezca no solo
PERL_UNICODE=SDAL
sino tambiénPERL5OPT=-Mutf8
.fuente
Gracias, finalmente obtuve una solución para no poner utf8 :: encode en todo el código. Para sintetizar y completar para otros casos, como escribir y leer archivos en utf8 y también funciona con LoadFile de un archivo YAML en utf8
donde cache.yaml es:
fuente
hacer en su shell: $ env | grep LANG
Esto probablemente mostrará que su shell no está usando una configuración regional utf-8.
fuente