找到std :: wstring的长度

时间:2013-02-21 02:49:16

标签: c++ winapi unicode wstring

如何确定std::wstring中的长度(字符数)?

使用myStr.length()给出字节大小(我认为),但不是字符数。我是否需要创建自己的函数来查找字符数或是以原生C ++方式还是以原生WinAPI方式

2 个答案:

答案 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