选择icu :: UnicodeString的编码

时间:2015-12-29 15:13:21

标签: c++ unicode icu

我发现自己需要一种方法将字符串更改为小写,可以安全地用于ASCII和UTF16-LE(在某些Windows注册表字符串中找到)并遇到了这个问题:How to convert std::string to lower case?

对我来说似乎是“最正确”的答案(我没有使用Boost)是demonstrated using the icu library的答案。

在这个答案中,他为UnicodeString构造函数指定了编码“ISO-8859-1”。为什么这是正确的值,我怎么知道使用什么?

ISO-8859-1已经针对我使用的仅使用拉丁字符的ASCII编码字符串运行的少数单元测试工作,但如果我不知道原因,我不喜欢使用它。

如果重要,我主要关注的是操纵通常以ASCII格式存储的英文数据,但是Windows注册表能够以UTF-16LE存储内容,我不想阻止自己支持其他语言通过使用非unicode安全的东西乱丢我的代码来实现。

1 个答案:

答案 0 :(得分:1)

  

我发现自己需要一种方法来将字符串更改为小写,以便进行不区分大小写的字符串比较

ICU中的

UnicodeString有许多caseCompare()方法,用于“使用完整案例折叠不区分大小写”进行比较。您无需手动转换字符串。

  

在这个答案中,他为UnicodeString构造函数指定了编码“ISO-8859-1”。为什么这是正确的值,我怎么知道使用什么?

因为作者正在将ISO-8859-1编码的char*字符串文字传递给构造函数。 UnicodeString表示UTF-16编码的字符串。如果使用char*作为输入构造它,则必须指定输入数据编码的正确字符集,以便UnicodeString可以将其解码为Unicode,然后将其重新编码为UTF-16。 / p>