应该是perl';是否始终通过utf8::decode对Glob进行后期筛选?

应该是perl';是否始终通过utf8::decode对Glob进行后期筛选?,perl,unicode,utf-8,internationalization,Perl,Unicode,Utf 8,Internationalization,以下最小示例的输出显示(在我的linux机器上)File::Glob似乎具有将utf8字符串转换为非utf8的意外副作用: #!/usr/bin/perl use utf8; use strict; my $x = "påminnelser"; my $y = glob $x; print "x=",utf8::is_utf8($x),"=\n"; print "y=",utf8::is_utf8($y),"=\n"; 这导致了我程序中的错误行为。在linux上,我似乎可以通过在Fi

以下最小示例的输出显示(在我的linux机器上)File::Glob似乎具有将utf8字符串转换为非utf8的意外副作用:

#!/usr/bin/perl 

use utf8;

use strict;

my $x = "påminnelser";
my $y = glob $x;

print "x=",utf8::is_utf8($x),"=\n";
print "y=",utf8::is_utf8($y),"=\n";

这导致了我程序中的错误行为。在linux上,我似乎可以通过在File::Glob之后应用utf8::decode()来修复它。这是解决这个问题的正确方法吗?这是File::Glob中的错误吗?我的修复程序会在其他系统(如Windows)上产生正确的结果吗?

处理文件名的函数的编码处理当前在perl的todo列表中:。问题是,一些流行的操作系统(如Linux)不支持文件名编码(除了使用当前的语言环境设置,但这是由设计破坏的),所以用Perl获得一个可移植的解决方案并不是那么容易


我的建议是避免使用非ASCII文件名。

谢谢您提供的有用信息,+1。但这并没有回答我的问题,即我的变通方法是否正确和/或可取。我不想武断地告诉我的用户,他们不能有非ASCII文件名。只有当您的所有用户都使用utf8作为文件名的编码时,才建议这样做。如果您的用户的区域设置为no_no.ISO8859-1,并根据此区域设置创建文件名,那么它将不起作用。在这种情况下,您必须开始猜测,可能使用
Encode::guess
或类似模块。我明白了。因此,我认为我的问题的答案是,我提出的解决方案是一个坏主意,可能会被一些用户打破+1.