【问题标题】:Should perl's File::Glob always be post-filtered through utf8::decode?perl 的 File::Glob 是否应该始终通过 utf8::decode 进行后过滤?
【发布时间】:2013-08-28 11:30:10
【问题描述】:

以下最小示例的输出显示(在我的 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 unicode utf-8 internationalization


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您提供有用的信息,+1。但这并不能回答我的问题,即我的解决方法是否正确和/或可取。我不想随意告诉我的用户他们不能有非 ASCII 文件名。
    • 仅当您的所有用户都使用 utf8 作为文件名的编码时才建议使用。如果您的用户使用 no_NO.ISO8859-1 作为他们的语言环境并根据该语言环境创建文件名,那么它将不起作用。在这种情况下你必须开始猜测,可能使用Encode::Guess 或类似的模块。
    • 我明白了。所以我认为我的问题的答案是我提出的解决方法是一个坏主意,并且对于某些用户来说可能会被破坏。 +1
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 2011-06-07
    • 2022-07-02
    • 1970-01-01
    • 2016-10-12
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多