[Cascavel-pm] Problemas com "read" quando lendo caracteres UTF8

Gabriel Vieira gabriel.vieira em gmail.com
Terça Agosto 24 15:14:52 PDT 2010


---------------8<---------------
use utf8; # Garante codificação utf8 dentro do próprio código (no caso
das comparações)

binmode(STDIN,":utf8");
binmode(STDOUT,":utf8");

my $x;

read STDIN, $x, 1;

chomp $x; # Retira o \n ao fim da entrada

if ($x =~ /^[cçaáº]/) {
   print "ok 1\n";
}

if ($x eq 'ç') {
   print "ok 2\n";
}

print "$x\n";
---------------8<---------------

Uma explicação legal feita pelo Adriano Ferreire pode ser vista em:
http://mail.pm.org/pipermail/saopaulo-pm/2010/010672.html
Nesta thread houve uma boa discussão sobre o tema.


Abraços,

2010/8/24 Ednardo Lobo <ednardo em lobo.eti.br>:
> Gabriel,
>
> Alterando a codificação da entrada (STDIN) e da saída (STDOUT) o caractere
> foi lido e impresso corretamente. Entretanto, operações como "eq" e "=~"
> aplicadas a caracteres especiais falhou, veja:
>
> ---------------------------
> binmode(STDIN,":utf8");
> binmode(STDOUT,":utf8");
>
> my $x;
>
> read STDIN, $x, 1;
>
> if ($x =~ /^[cçaáº]/) {
>    print "ok 1\n";
> }
>
> if ($x eq 'ç') {
>    print "ok 2\n";
> }
>
> print "$x\n";
> ---------------------------
>
>
> Grato,
>
> Gabriel Vieira escreveu:
>>
>> 2010/8/24 Ednardo Lobo <ednardo em lobo.eti.br>:
>>>
>>> Estou com problemas para ler caracteres especiais de arquivos com a
>>> codificação Unicode (UTF-8).
>>>
>>> Experimentem esse código:
>>>
>>> my $x;
>>>
>>> read STDIN,$x,1;
>>>
>>> print $x;
>>>
>>>
>>> Caracteres especiais como "á", "ç" e "º" não serão lidos corretamente.
>>>
>>>
>>> Tentei as seguintes soluções mas não surtiram efeito:
>>>
>>> 1) use open ':encoding(utf8)';
>>>
>>> 2) binmode(STDIN,':utf8');
>>>
>>>
>>> Alguma sugestão?
>>
>> Você alterou a encode da entrada e conferiu com a saída, que não teve
>> a encode alterada
>>
>> Teste:
>> ---------------8<---------------
>> binmode(STDIN,":utf8");
>> binmode(STDOUT,":utf8");
>> my $x;
>> read STDIN, $x, 1;
>> print$x;
>> --------------->8---------------
>
>
> --
>    Ednardo Lobo
>
>    www.lobo.eti.br
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>



-- 
Gabriel Vieira


Mais detalhes sobre a lista de discussão Cascavel-pm