1

utf-8を使用してエンコードされた単語のリストをソートする次のPerlスクリプトがあります。

use HTML::Entities;
use Unicode::Collate::Locale;
use utf8;

my @array = (
     "Another", 
     "An Other", 
     "Anóther", 
     "An Óther", 
     "Anòther", 
     "An Òther", 
     "Anôther", 
     "An Ôther", 
     "Anöther", 
     "An Öther", 
     "Anõther", 
     "An Õther"
     );

my $lang = "da";

printf ("Lang code is: %s\n", $lang);

my $coll = Unicode::Collate::Locale->new(locale => "$lang");

my @result = $coll->sort(@array);


foreach my $item (@result){

print $item, "\n";
}

出力されるものは次のとおりです。

Lang code is: da
An Other
Another
An Óther
Anóther
An Òther
Anòther
An Ôther
Anôther
An Õther
Anõther
An Öther
Anöther

ただし、次のように出力したいと思います。

An Other
An Óther
An Òther
An Ôther
An Õther
An Öther
Another
Anóther
Anòther
Anôther
Anõther
Anöther

理論的根拠は、スペース文字を他の文字の前に並べ替えたいということです。Collat​​or オブジェクトを取得してそれを支援する方法はありますか?

4

1 に答える 1

3

変数の重み付けを に設定してみてください'non-ignorable':

my $coll = Unicode::Collate::Locale->new(
    locale   => $lang,
    variable => 'non-ignorable',
);

詳細については、Unicode Collat​​ion Algorithm (UCA) の仕様のセクションVariable Weightingを参照してください。

于 2013-02-27T21:35:45.487 に答える