在任何标准库中是否有任何原生(跨平台)C++
函数返回std::string
的实际长度?
更新
我们知道std::string.length()
返回字节数而不是字符数。
我已经有了一个返回实际函数的自定义函数,但我正在寻找一个标准函数。
答案 0 :(得分:6)
codecvt
应该有用,标准提供了UTF-8的实现,例如codecvt_utf8<char32_t>()
在这种情况下是合适的。
可能类似于:
wstring_convert< codecvt_utf8<char32_t>, char32_t >().from_bytes(the_std_string).size()
答案 1 :(得分:1)
实际长度是字节数。计算代码点的意义非常小。你可能想要计算像石墨簇一样的其他东西。
中查看有关不同类型字符串长度的详细信息答案 2 :(得分:1)
没有第三方库,在C / C ++中没有办法做到这一点。 即使你转换为char32_t,你也会获得代码点,而不是字符。
代码点与用户对字符的感知不匹配,因为分解格式,连字,变体选择器等事情。
“用户角色”最接近的可用构造是“字形簇” (见http://www.unicode.org/reports/tr29/)
您最好的跨平台选项是ICU4C(http://site.icu-project.org/)