【问题标题】:Perl multilingual sort: Want spaces to sort above lettersPerl 多语言排序:希望空格在字母上方排序
【发布时间】:2013-02-13 20:50:27
【问题描述】:

我有以下 Perl 脚本,它对单词列表进行排序,使用 utf-8 编码:

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 对象帮助我做到这一点?

【问题讨论】:

    标签: perl unicode multilingual


    【解决方案1】:

    尝试将变量权重设置为'non-ignorable'

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

    有关详细信息,请参阅 Unicode Collat​​ion Algorithm (UCA) 规范中的 Variable Weighting 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多