0

CP850 を搭載した WinXP ターミナルでこのスクリプトを実行すると、Üöが正しく表示されます。行のコメントを外すとuse Win32::Console::ANSI;、出力が壊れます。
この動作は予期できるものですか、それともバグですか?

#!perl
use warnings;
use strict;
use 5.10.0;
binmode STDOUT, ':encoding(cp850)';

use Encode qw(decode_utf8);
use URI::Escape qw(uri_unescape);
#use Win32::Console::ANSI;

my $uri_escaped = '%C3%9Cberraschungsei+R%C3%B6ntgen';
say $uri_escaped;

my $uri_unescaped = uri_unescape( $uri_escaped );
say $uri_unescaped;

my $utf8_decoded = decode_utf8( $uri_unescaped );
say "Result: $utf8_decoded";

%C3%9Cberraschungsei+R%C3%B6ntgen
"\x{009c}" does not map to cp850 at C:perl.pl line 15.
Ã\x{009c}berraschungsei+Röntgen
Result: Überraschungsei+Röntgen

Win32::Console::ANSIが有効な場合:

%C3%9Cberraschungsei+R%C3%B6ntgen
"\x{009c}" does not map to cp850 at C:perl.pl line 15.
Ç\x{009c}berraschungsei+RÇôntgen
Result: sberraschungsei+R"ntgen
4

1 に答える 1

2

OEM コード ページではなく、ANSI コード ページ (cp1252) を使用します。

>chcp
Active code page: 437

>perl a.pl cp437
%C3%9Cberraschungsei+R%C3%B6ntgen
Überraschungsei+Röntgen

>perl -MWin32::Console::ANSI a.pl cp1252
%C3%9Cberraschungsei+R%C3%B6ntgen
Überraschungsei+Röntgen
于 2013-08-29T11:35:13.627 に答える