【发布时间】:2011-05-03 01:34:12
【问题描述】:
我的 std::string 是 utf-8 编码的,很明显,str.length() 返回错误的结果。
我找到了此信息,但我不确定如何使用它来执行此操作:
以下字节序列是 用来表示一个字符。这 顺序是 使用取决于字符的 UCS 码数:
0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
如何找到 UTF-8 编码的 std::string 的实际长度?谢谢
【问题讨论】:
-
C++ 对编码一无所知,因此您不能指望使用标准函数来执行此操作。如果您不想从头开始编写一个,某些操作系统(例如 Windows)可能会提供帮助解决此问题的功能。
-
我明白这就是为什么我也标记了这个算法,我确实想从头开始写一个
-
请注意,虽然 Michael 的声明在他编写时是正确的,但从 C++11 开始,标准库确实了解编码。见stackoverflow.com/questions/16863937/…
-
“实际长度”是什么意思?码点数?在 NFC、NFD、NFKC 或 NFKD 中?复合字符数?字素的数量?字素簇的数量?屏幕上给定字体的像素数?
-
确实,这里的大部分答案都假设“实际长度”是指“代码点数”。