使用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”是真的
问题
我是否以正确的方式使用这些功能? 这是预期的行为吗? 我该怎么做才能符合我的期望?
谢谢大家