Специальные символы для Perl

Я пытаюсь использовать специальные символы немецкого языка: öäüßÖÄÜ в выводе консольного приложения ma perl, но мне это не удалось. Это немецкая система win7 с активной кодовой страницей 850.

#!/usr/bin/perl 
use warnings;
use strict;

binmode(STDOUT , ":encoding(cp437)" )  if $^O eq 'MSWin32';
#binmode(STDOUT , ":encoding(cp850)" )  if $^O eq 'MSWin32';
#binmode(STDOUT , ":encoding(cp1252)" ) if $^O eq 'MSWin32';

my @sp_chars = qw/ä ö ü ß Ä Ö Ü/;

foreach my $sp_char ( @sp_chars ) {
  print "$sp_char\n";
}

Я получаю ошибки, такие как:

"\x{009f}" does not map to cp1252 at umlaute.pl line 12.

"\x{009f}" does not map to cp850 at umlaute.pl line 12.

"\x{00c3}" does not map to cp437 at umlaute.pl line 12.

Как я могу получить проппер выход?

1 ответ

Решение

При использовании символов utf8 в исходном коде и использовании уровня IO для кодирования вам следует включить utf8 в анализаторе perl:

use utf8; 

my $encoding = $^O eq 'MSWin32' ? 'cp850' : 'utf8';
binmode(STDOUT, ":encoding($encoding)" );

print "$_\n" for qw/ä ö ü ß Ä Ö Ü/;
Другие вопросы по тегам