Я сталкиваюсь со странной проблемой при печати строк Unicode на консоли Windows *.
Рассмотрим этот текст:
אני רוצה לישון
Intermediary
היא רוצה לישון
אתם, הם
Bye
Hello, world!
test
Предположим, он находится в файле с именем "file.txt".
Когда я захожу *: "введите file.txt", он печатается нормально. Но когда он печатается из программы на Perl, вот так:
use strict;
use warnings;
use Encode;
use 5.014;
use utf8;
use autodie;
use warnings qw< FATAL utf8 >;
use open qw< :std :utf8 >;
use feature qw< unicode_strings >;
use warnings 'all';
binmode STDOUT, ':utf8'; # output should be in UTF-8
my $word;
my @array = ( 'אני רוצה לישון', 'Intermediary',
'היא רוצה לישון', 'אתם, הם', 'Bye','Hello, world!', 'test');
foreach $word(@array) {
say $word;
}
Строки Unicode (в данном случае иврит) снова появляются каждый раз, частично разбитые, например:
E:\My Documents\Technical\Perl>perl "hello unicode.pl"
אני רוצה לישון
לישון
�ן
Intermediary
היא רוצה לישון
לישון
�ן
אתם, הם
�ם
Bye
Hello, world!
test
(я сохраняю все в UTF-8).
Это очень странно. Есть предложения?
(Это не проблема «Console2» * - та же проблема появляется на «обычной» консоли Windows, только там вы не видите ивритские глифы).
* Использование «Консоли» (также называемой «Консоль2») - это приятная небольшая утилита, которая позволяет работать с Unicode с консолью Windows - см., Например, здесь:
http://www.hanselman.com/blog/Console2ABetterWindowsCommandPrompt.aspx
** Примечание: на консоли вы, конечно, должны сказать:
chcp 65001