proyectos ejemplos perl unicode utf-8

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/;



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.