3

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

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

4

2 回答 2

4

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

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

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

于 2013-02-21T03:00:56.283 回答
3

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

于 2013-02-21T03:01:55.940 回答