Различное поведение при использовании константной строки и чтения данных из файла - PullRequest
2 голосов
/ 18 января 2012

У меня проблемы с чтением файла UTF-8 и обнаружением некоторых не-ASCII символов, таких как «á» или «ö». Если я просто объявляю постоянную строку с символами UTF-8, все работает нормально, ошибка возникает только для содержимого файла.

Мой входной файл выглядит так:

áéíóúöüőűÁÉÍÓÚÖÜŐŰäÄß

Моя Perl-программа выглядит так:

use utf8;    
binmode STDOUT, ":utf8";    
my $szo = "áéíóúöüőűÁÉÍÓÚÖÜŐŰäÄß";    
list($szo);

while(<STDIN>){
chomp;
list($_);
}

sub list($){
  my ($szo) = @_;

  my @arr = split(//, $szo);
  foreach(@arr){
     my $ord = ord($_);
     if($_ eq 'á'){print "á\n";}
     print "isoe elem:$_ ord:$ord \n"; 
  }
}

Результатом выполнения будет следующий вывод:

á  
isoe elem:á ord:225   
isoe elem:é ord:233   
isoe elem:í ord:237   
isoe elem:ó ord:243   
....    
isoe elem:ß ord:223   
From here file data, no good:  
isoe elem:Ã ord:195   
isoe elem:¡ ord:161   
isoe elem:Ã ord:195   
isoe elem:© ord:169   
...    
isoe elem:Ã ord:195   
isoe elem: ord:159

1 Ответ

8 голосов
/ 18 января 2012

Вам необходимо указать кодировку UTF-8 также для STDIN, как вы это сделали для STDOUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...