查找std::wstring的长度
Find length of std::wstring
如何确定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
。
- 将日语 wstring 转换为 std::string
- -fshort-wchar 和 std::wstring - 分段错误
- 如何将std::wstring转换为char const[]
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 找不到 std::wstring 中存在的wchar_t
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 将整数附加到 std::wstring 会给出错误
- 如何从 LPWSTR** 转换为 std::vector<std::wstring>
- std::vector<std::wstring> 移动/重新分配内部 wstring.data() 合法吗?
- 使用STD :: WSTRING或WCHAR_T登录
- 从 std::wstring 转换为 jstring
- UTF8 数据到 std::string 或 std::wstring
- 将 std::u16string 转换为 std::wstring,无需复制
- 如何通过 std::unordered_map<std::wstring, T> 中的 std::wstring_view 类型的键查找?
- 从相同的硬编码字符串文字初始化std::string和std::wstring
- C++:为什么在 #include 之前调用 std::wstring::begin() 会导致<vector>此代码中的编译器错误?
- C++ DLL 返回指向 std::list<std::wstring 的指针>
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- std::wstring 和 LOGFONT 重载冲突 - 为什么?
- Custom Stringstream - Convert std::wstring & std::string