boost :: locale icu sortKey

时间:2014-10-05 17:54:09

标签: c++ boost icu

我正在编写代码,在数据库中创建索引。使用ICU库我的工作流程是:

    用户区域设置中的
  • 字符串 - >
    转换为utf8 - >
    normalize utf8 - >
    调用ICU ucol_getSortKey以获取构建索引的排序键。

现在我切换到Boost Locale。 Can Boost Locale可以像ICU一样构建排序键吗?或者我应该直接以某种方式致电ICU?

1 个答案:

答案 0 :(得分:1)

看起来这就是Boost Locale所知的collate_impl::do_[basic_]transform()

std::vector<uint8_t> do_basic_transform(level_type level,CharType const *b,CharType const *e) const 
{
    icu::UnicodeString str=cvt_.icu(b,e);
    std::vector<uint8_t> tmp;
    tmp.resize(str.length());
    icu::Collator *collate = get_collator(level);
    int len = collate->getSortKey(str,&tmp[0],tmp.size());
    if(len > int(tmp.size())) {
        tmp.resize(len);
        collate->getSortKey(str,&tmp[0],tmp.size());
    }
    else 
        tmp.resize(len);
    return tmp;
}

std::basic_string<CharType> do_transform(level_type level,CharType const *b,CharType const *e) const
{
    std::vector<uint8_t> tmp = do_basic_transform(level,b,e);
    return std::basic_string<CharType>(tmp.begin(),tmp.end());
}

为了表现,您似乎想要致电do_basic_compare