查找std::wstring的长度

Find length of std::wstring

本文关键字:wstring std 查找      更新时间:2023-10-16

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

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

std::wstring::length()将为您提供字符数,其中字符定义为wstring对象的原子单位,即wchar。这就是标准提到characters时的含义(有关标准中该词使用的更多详细信息,请参阅本文)。

然而,当涉及到Unicode字符时,一个wchar是否对应于一个Unicode字符取决于wstring内部使用的编码。如果使用UTF-16(通常(但不一定)是这种情况),一个wchar将仅对应于基础多语言平面的一个Unicode字符(即,源自ISO-8859的所有字符集以及大多数常用的CJK字符,但不是一些更奇特的(如文言文)字符)(*)。在这种情况下,如果您想正确计算所有Unicode字符的字符数,则需要使用支持Unicode的库(例如ICU),或者自己编写代码。

(*)如果使用组合字符,则会出现其他问题,如@一二三正确指出。正确计算这些数字最好使用适当的库。

如果您想知道wchar_t实体中的长度,请使用myStr.length()。如果你想知道Unicode代码点的大小,你必须找到一个知道如何计算这些代码点的库。您也可以自己编写一个-确定编码为UTF-16的代码点是否使用一个或两个实体的规则并不太难,请参阅http://en.wikipedia.org/wiki/Utf-16.要知道您的wchar_t是否为16位(而不是32位),请使用sizeof(wchar_t) == 2