Я хочу читать вход UTF-8 в Perl, независимо от того, поступает он от стандартного ввода или из файла, используя оператор алмаза: while(<>){...}
.
Итак, мой script должен быть вызван этими двумя способами, как обычно, с тем же выходом:
./script.pl utf8.txt
cat utf8.txt | ./script.pl
Но выходы отличаются! Только второй вызов (с использованием cat
), по-видимому, работает так, как было разработано, правильно прочитав UTF-8. Вот script:
#!/usr/bin/perl -w
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>){
my @chars = split //, $_;
print "$_\n" foreach(@chars);
}
Как я могу заставить его правильно читать UTF-8 в обоих случаях? Я хотел бы продолжать использовать алмазный оператор <>
для чтения, если это возможно.
EDIT:
Я понял, что должен, вероятно, описать разные результаты. Мой входной файл содержит следующую последовательность: a\xCA\xA7b
. Метод с cat
корректно выводит:
a
\xCA\xA7
b
Но другой метод дает мне следующее:
a
\xC3\x8A
\xC2\xA7
b