Estou tentando escrever um script Perl usando o pragma "utf8" e estou obtendo resultados inesperados. Estou usando o Mac OS X 10.5 (Leopard) e estou editando com o TextMate. Todas as minhas configurações para meu editor e sistema operacional são padronizadas para gravar arquivos no formato utf-8.
No entanto, ao inserir o seguinte em um arquivo de texto, salvá-lo como ".pl" e executá-lo, recebo o amigável "diamante com um ponto de interrogação" no lugar dos caracteres não ASCII.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
Alguma ideia do que estou fazendo de errado? Espero obter 'Çirçös' na saída, mas recebo ' ir s' em vez disso.
utf8
:Respostas:
use utf8;
não ativa a saída Unicode - permite que você digite Unicode em seu programa. Adicione isto ao programa, antes de suaprint()
declaração:Veja se isso ajuda. Isso deve produzir
STDOUT
saída em UTF-8 em vez de ASCII comum.fonte
Você pode usar o pragma aberto .
Por exemplo. abaixo define STDOUT, STDIN e STDERR para usar UTF-8 ....
fonte
TMTOWTDI , escolheu o método que melhor se adapta ao seu trabalho. Eu uso o método do ambiente, então não preciso pensar sobre isso.
No meio ambiente :
na linha de comando :
ou com binmode :
ou com PerlIO :
ou com o pragma aberto :
fonte
SDL
está implícito em-C
ePERL_UNICODE
. Ouse open ':locale'
pragma também vale a pena ser mencionado, porque é o equivalente no script de-C
eexport PER_UNICODE=
. Qualquer um desses 3 fornecerá suporte UTF8 para todos os fluxos de entrada e saída (sejam arquivos ou stdin / stdout / stderr), assumindo que a localidade do seu ambiente é baseada em UTF8. Finalmente, para tratar também o código- fonte como UTF8, use ouse utf8;
pragma.perl -Mutf8 -CSDL -e '...'
permite consumir / produzir UTF-8 , bem como usar literais UTF-8 dentro,-e
por exemplo, para a pasta do caso de um homem pobre:perl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Você também quer dizer que as strings em seu código são utf-8. Consulte Por que o Perl moderno evita UTF-8 por padrão? . Portanto, defina não só,
PERL_UNICODE=SDAL
mas tambémPERL5OPT=-Mutf8
.fonte
Obrigado, finalmente consegui uma solução para não colocar utf8 :: encode em todo o código. Para sintetizar e completar para outros casos, como escrever e ler arquivos em utf8 e também trabalhar com LoadFile de um arquivo YAML em utf8
onde cache.yaml é:
fonte
faça no seu shell: $ env | grep LANG
Isso provavelmente mostrará que seu shell não está usando uma localidade utf-8.
fonte