Perl: печать строк Unicode в консоли Windows

Я столкнулся со странной проблемой при печати строк Unicode в консоли Windows *.

Рассмотрим этот текст:

אני רוצה לישון

Intermediary

היא רוצה לישון
אתם, הם
Bye
Hello, world!
test

Предположим, он находится в файле с именем «file.txt».

Когда я набираю *: "type 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, только там вы не видите ивритских глифов).


* Использование «Console» (также называемого «Console2») - это небольшая симпатичная утилита, которая позволяет работать с Unicode с консолью Windows - см., Например, здесь: http://www.hanselman.com/blog/Console2ABetterWindowsCommandPrompt.aspx

** Примечание: на консоли вы, конечно, должны сказать:

chcp 65001

8
задан sarnold 21 February 2012 в 01:24
поделиться