ejemplos - ¿Cómo puedo enviar UTF-8 desde Perl?
django (6)
Gracias, finalmente obtuve una solución para no poner a utf8 :: codificar 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
use utf8;
use open '':encoding(utf8)'';
binmode(STDOUT, ":utf8");
open(FH, ">test.txt");
print FH "something éá";
use YAML qw(LoadFile Dump);
my $PUBS = LoadFile("cache.yaml");
my $f = "2917";
my $ref = $PUBS->{$f};
print "$f /"".$ref->{name}."/" ". $ref->{primary_uri}." ";
donde cache.yaml es:
---
2917:
id: 2917
name: Semanário
primary_uri: 2917.xml
Intento escribir un script 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 un ".pl" y lo ejecuto, obtengo el "diamante con signo de interrogación" amistoso 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.
Puedes usar el pragma abierto .
Por ej. a continuación establece STDOUT, STDIN & STDERR para usar UTF-8 ....
use open qw/:std :utf8/;
También quiere decir que las cadenas en su código son utf-8. Consulte ¿Por qué Perl moderno evita UTF-8 de forma predeterminada? . Así que configure no solo PERL_UNICODE=SDAL
sino también PERL5OPT=-Mutf8
.
hacer en su shell: $ env | grep LANG
Esto probablemente mostrará que su caparazón no está utilizando una configuración regional de utf-8.
TMTOWTDI , elija el método que mejor se adapte a su forma de trabajar. Uso el método del entorno, así que no tengo que pensarlo.
En el environment :
export PERL_UNICODE=SDL
en la línea de comando :
perl -CSDL -le ''print "/x{1815}"'';
o con binmode :
binmode(STDOUT, ":utf8"); #treat as if it is UTF-8
binmode(STDIN, ":encoding(utf8)"); #actually check if it is UTF-8
o con PerlIO :
open my $fh, ">:utf8", $filename
or die "could not open $filename: $!/n";
open my $fh, "<:encoding(utf-8)", $filename
or die "could not open $filename: $!/n";
o con el pragma abierto :
use open ":encoding(utf8)";
use open IN => ":encoding(utf8)", OUT => ":utf8";
use utf8;
no habilita la salida Unicode - le permite escribir Unicode en su programa. Agregue esto al programa, antes de su declaración print()
:
binmode(STDOUT, ":utf8");
A ver si eso ayuda. Eso debería hacer que STDOUT
en UTF-8 en lugar de ASCII ordinario.