使用ICU4C,如何比较UTF8字符串

时间:2015-07-09 14:48:04

标签: c++ utf-8 icu

使用ICU4C我想在c ++中比较2个utf8字符串。 到目前为止,我一直在使用它:

ICU4C第54.1版

ICU是在macOSX上编译的,我使用了这个额外的编译标志U_CHARSET_IS_UTF8 = 1

我正在使用的ICU功能:

    Locale loc("fr", "CA");
    UErrorCode status = U_ZERO_ERROR;
    Collator *pColl = Collator::createInstance(loc, status);
    ASSERT_FALSE(U_FAILURE(status));
    pColl->setStrength(Collator::SECONDARY);

    UnicodeString unicodeStringLhs("étiennematineau")
    UnicodeString unicodeStringRhs("zeaval")

这部分代码位于应用程序的其他位置。 首先,我将unicode转换为UTF8

    std::string strLhs;
    strLhs = unicodeStringLhs.toUTF8String<std::string>(strLhs);

    std::string strRhs;
    strRhs = unicodeStringRhs.toUTF8String<std::string>(strRhs);

    std::cout<<strLhs<<':'<<strRhs<<"\n";

    const char * test =  strLhs.c_str(); //  "\303\251tiennematineau"

然后使用compareUTF8进行比较。

    int r = pColl->compareUTF8(strLhs, strRhs,status);

什么是

在这种特殊情况下,compareUTF8返回-1。

我的期待

compareUTF8返回1 如在python中你“étiennematineau”&gt;你“zeaval”是真的

问题

我是否以正确的方式使用这些功能? 这是预期的行为吗? 我该怎么做才能符合我的期望?

谢谢大家

0 个答案:

没有答案