查找std :: wstring的字符长度

use*_*747 0 c++ unicode

我正在使用std :: wstring变量(C++语言),我正在尝试确定字符串的长度(以字符为单位).

函数.length和.size()给出的结果不是字符的长度(我想它们告诉我有多少个字符?).

那么有没有办法确定wstring的字符长度?

Nic*_*las 6

你是什​​么意思"人物"?

std::basic_string只是一系列值的容器,我们认为它是一个字符串.它不关心值的编码 ; 它所做的就是存储和管理有序的值序列.因此它sizelength函数说明它存储了多少个值.

如果你std::wstring包含一个代表一个有效的UTF-16编码字符串的字符串,std::wstring则无关紧要.Unicode编码只是编码代码点的方法.UTF-16使用16位代码单元对其代码点进行编码,代码点可以包括对应于单个Unicode代码点的16位值的代理对.

但是,Unicode代码点不是该术语的某些定义的"字符".例如,存在组合代码点,其中多个代码点被组合以形成字形.有不可见的代码点(控制代码等).

如果您想知道a中有多少个代码点std::wstring,那么您必须使用可以处理UTF-16数据的函数来遍历该字符串.如果您想知道字符串中有多少字形(逻辑字形),那么您需要使用更复杂的算法来处理它.


ybu*_*ill 5

为此,您必须使用Unicode数据库.您应该使用ICU(如何在ICU中执行)或其他一些Unicode库.Boost.Locale已被接受提升并将很快推出,它以一种很好的方式包含了ICU的一些功能.

但是,我怀疑你确实需要这样做.请参阅字形,字符,代码点,codeunit的定义.可能你的意思是代码点,但几乎可以肯定它不是很有用.