Perl: imprimindo strings Unicode no console do Windows
Estou com um problema estranho ao imprimir seqüências de caracteres Unicode no console do Windows *.
Considere este texto:
אני רוצה לישון
Intermediary
היא רוצה לישון
אתם, הם
Bye
Hello, world!
test
Suponha que ele esteja em um arquivo chamado "file.txt"
Quando for *: "digite file.txt", ele será impresso corretamente. Mas quando é impresso a partir de um programa Perl, é assim:
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;
}
As linhas Unicode (neste caso, hebraico) são exibidas novamente a cada vez, parcialmente quebradas, assim:
E:\My Documents\Technical\Perl>perl "hello unicode.pl"
אני רוצה לישון
לישון
�ן
Intermediary
היא רוצה לישון
לישון
�ן
אתם, הם
�ם
Bye
Hello, world!
test
(Guardo tudo em UTF-8).
Isso é muito estranho. Alguma sugestão
(Não é um problema do "Console2" * - o mesmo problema aparece em um console do Windows "normal", somente aí você não vê os glifos hebraicos
* Usando "Console" (também chamado de "Console2") - é um pequeno utilitário que permite trabalhar com Unicode com o console do Windows - veja, por exemplo, aqui:http: //www.hanselman.com/blog/Console2ABetterWindowsCommandPrompt.asp
** Nota: no console, você deve dizer, é claro:
chcp 65001