使用常量字符串与从文件读取数据时的不同行为

时间:2012-01-18 14:01:01

标签: perl

我无法读取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 个答案:

答案 0 :(得分:8)

您还需要为STDIN指定UTF-8编码,就像您对STDOUT所做的那样。