【发布时间】:2010-10-05 21:08:04
【问题描述】:
我想在 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
【问题讨论】: