如何确定std::wstring
中的长度(字符数)?
使用myStr.length()
给出字节大小(我认为),但不是字符数。我是否需要创建自己的函数来查找字符数或是以原生C ++方式还是以原生WinAPI方式?
答案 0 :(得分:3)
std::wstring::length()
将为您提供字符数,其中 character 被定义为wstring
对象的原子单位,即wchar
。这是标准在引用characters
时的含义(有关标准中单词使用的更多详细信息,请参阅this post。)
但是,对于Unicode字符,一个wchar
是否对应一个Unicode字符取决于wstring
内使用的编码。如果使用UTF-16(通常(但不一定)),一个wchar
将仅对应于基本多语言平面的一个Unicode字符(即,从ISO-8859以及大多数派生的所有字符集)常用的CJK字符,但不是一些更奇特的(例如古典中文)字符)(*)。如果你想在这种情况下获得所有 Unicode字符的字符数,你需要使用支持Unicode的库(例如ICU),或者自己编写代码。
(*)如果使用组合字符,还有其他问题,正如@一二三指出的那样正确。正确计算这些也是最好的,使用适当的库。
答案 1 :(得分:2)
如果您想知道wchar_t
个实体的长度,请使用myStr.length()
。如果你想知道Unicode代码点的大小,你必须找到一个知道如何计算它们的库。您也可以自己编写一个 - 确定编码为UTF-16的代码点是否使用一个或两个实体的规则并不太难,请参阅http://en.wikipedia.org/wiki/Utf-16。要知道wchar_t
是否为16位(对比32位),请使用sizeof(wchar_t) == 2
。