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

Ednardo Lobo ednardo em lobo.eti.br
Terça Agosto 24 15:04:34 PDT 2010


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


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