C ++ UTF-8实际字符串长度

时间:2013-05-31 18:51:47

标签: c++ string unicode utf-8 std

在任何标准库中是否有任何原生(跨平台)C++函数返回std::string的实际长度?

更新 我们知道std::string.length()返回字节数而不是字符数。 我已经有了一个返回实际函数的自定义函数,但我正在寻找一个标准函数。

3 个答案:

答案 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)

实际长度是字节数。计算代码点的意义非常小。你可能想要计算像石墨簇一样的其他东西。

http://utf8everywhere.org

中查看有关不同类型字符串长度的详细信息

答案 2 :(得分:1)

没有第三方库,在C / C ++中没有办法做到这一点。 即使你转换为char32_t,你也会获得代码点,而不是字符。

代码点与用户对字符的感知不匹配,因为分解格式,连字,变体选择器等事情。

“用户角色”最接近的可用构造是“字形簇” (见http://www.unicode.org/reports/tr29/

您最好的跨平台选项是ICU4C(http://site.icu-project.org/