应该通过utf8 :: decode对perl的File :: Glob进行后期过滤吗?

Ben*_*ell 5 unicode perl 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";
Run Code Online (Sandbox Code Playgroud)

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

Sla*_*zic 4

处理文件名的函数的编码处理当前位于 Perl 的待办事项列表中:Filenames 中的 Unicode。问题是一些流行的操作系统(即 Linux)不支持文件名编码(除了使用当前的语言环境设置,但这在设计上被破坏了),因此在 Perl 中获得可移植的解决方案并不那么容易。

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