Правильная и переносимая нормализация имени файла utf8

Есть еще вопрос по perl/utf8:

Код:

use 5.012;
use utf8;
use strict;
use warnings;
use feature qw(unicode_strings);

use open qw(:std :utf8);
use Encode qw(encode decode);
use charnames qw(:full);
use Unicode::Normalize qw(NFD NFC);

my $name = "\N{U+00C1}";        # Á (UPPERCASE A WITH ACUTE)

opendir(my $dh, ".") || die "error opendir";
while(readdir $dh) {
    say "ENC-OK" if      decode('UTF-8', $_)   =~ $name; #never true
    say "NFC-OK" if NFC( decode('UTF-8', $_) ) =~ $name; #true
}
closedir $dh;

Приведенный выше код будет печатать NFC-OK для каждого файла, который содержит Áв имя файла. Но никогда не будет печатать ENC-OK в файловой системе с кодировкой NFD, потому что opendir никогда не возвращает Áв виде \x00C1, а "A", "accent"...

Вопрос: как правильно написать приведенный выше код, пригодный для любой ОС?

12
задан cajwine 2 June 2012 в 00:11
поделиться