我想使用菱形运算符读取 Perl 中的 UTF-8 输入,无论它来自标准输入还是来自文件:while(<>){...}
。
所以我的脚本应该可以通过这两种方式调用,像往常一样,给出相同的输出:
./script.pl utf8.txt
cat utf8.txt | ./script.pl
但是输出不同!只有第二个调用(使用cat
)似乎按设计工作,正确读取 UTF-8。这是脚本:
#!/usr/bin/perl -w
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>){
my @chars = split //, $_;
print "$_\n" foreach(@chars);
}
在这两种情况下,如何让它正确读取 UTF-8?如果可能的话,我想继续使用菱形运算符<>
进行阅读。
编辑:
我意识到我可能应该描述不同的输出。我的输入文件包含这个序列:a\xCA\xA7b
. cat
正确输出的方法:
a
\xCA\xA7
b
但另一种方法给了我这个:
a
\xC3\x8A
\xC2\xA7
b