以下代码在 Windows 10 1903 中进行了测试,perl -MWin32 -e"CORE::say Win32::GetACP()"
返回 ACP 1252(Win 10 北美)Win32 草莓-perl 5.30.2.1 #1 3 月 17 日星期二 03:21:32 2020 x64.
初次尝试安装cpan Win32::Unicode::File
失败了t/04_print.t(Wstat:768 测试:13 失败:3)信息。
在 Google 中快速搜索导致以下结果post关于 Perl 僧侣。看起来问题是Win32::Unicode::File
安装已知有一段时间了。
NOTE: ikegami指出可以强制安装模块,失败的测试可以忽略。请参阅下面他的评论。
以下测试代码确认强制安装cpan -f -i Win32::Unicode::File
产生期望的结果。
use strict;
use warnings;
use feature 'say';
use utf8;
use Win32::Console;
use Win32::Unicode::File;
Win32::Console::OutputCP( 65001 );
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
my $fname = 'Доброе утро Россия.mkv';
my $fh = Win32::Unicode::File->new;
open $fh, '<:encoding(UTF-8)', $fname
or die "Can't open $fname $!";
while( <$fh> ) {
say;
}
close $fh;
输入文件的内容Доброе утро Россия.mkv
is
Доброе утро Россия
正如上面提到的帖子中所建议的,我尝试了Win32::长路径作为备选。模块安装成功。
use strict;
use warnings;
use feature 'say';
use utf8;
use Win32::Console;
use Win32::LongPath;
Win32::Console::OutputCP( 65001 );
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
my $fname = 'IC3PEAK альбом Сладкая.mkv';
my $fh;
openL \$fh, '<:encoding(UTF-8)', $fname
or die "Can't open $fname ($^E)";
while( <$fh> ) {
# process input
say;
}
close $fh;
而不是真实的文件IC3PEAK альбом Сладкая.mkv测试中使用了具有以下内容的同名文本文件
Привет Москва
注意:使用openL \$fh, '<', $fname
真实的mkvfile 读取文件内容