Perl 使用常量字符串与从文件读取数据时的不同行为
我在读取UTF-8文件和检测一些非ASCII字符(如“á”或“ö”)时遇到问题。如果我简单地声明一个带有UTF-8字符的常量字符串,一切正常,错误只发生在文件内容上 我的输入文件如下所示:Perl 使用常量字符串与从文件读取数据时的不同行为,perl,Perl,我在读取UTF-8文件和检测一些非ASCII字符(如“á”或“ö”)时遇到问题。如果我简单地声明一个带有UTF-8字符的常量字符串,一切正常,错误只发生在文件内容上 我的输入文件如下所示: áéíóúöüőűÁÉÍÓÚÖÜŐŰäÄß 我的perl程序看起来: use utf8; binmode STDOUT, ":utf8"; my $szo = "áéíóúöüőűÁÉÍÓÚÖÜŐŰäÄß"; list($szo); while(<STDIN>){ ch
áéíóúöüőűÁÉÍÓÚÖÜŐŰäÄß
我的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";
}
}
您还需要为
STDIN
指定UTF-8编码,就像您为STDOUT
所做的那样,将从中读取的文件句柄设置为UTF-8?谢谢,将来我也会对文件使用utf8。谢谢,添加此:binmode STDIN,“:utf8”;解决了这个问题。
á
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