如何确定 a 中的长度(字符数)std::wstring
?
使用myStr.length()
给出字节大小(我认为),但不是字符数。我是否需要创建自己的函数来查找字符数,或者是否有原生 C++ 方式或原生 WinAPI 方式?
std::wstring::length()
将为您提供字符数,其中字符定义为wstring
对象的原子单位,即 a 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
.