查找 std::wstring 的长度

saz*_*azr 3 c++ unicode winapi wstring

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

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

jog*_*pan 5

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

\n\n

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

\n\n

(*)如果使用组合字符,则会出现其他问题,正如 @\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89 正确指出的那样。正确计算这些也最好使用适当的库来完成。

\n

  • “*如果使用 UTF-16,这很常见*” 如果“通常”是指“在 Windows 上”。 (8认同)