任何标准库中是否有任何本机(跨平台)C++
函数返回实际长度std::string
?
更新:
我们知道std::string.length()
返回字节数而不是字符数。我已经有一个返回实际函数的自定义函数,但我正在寻找一个标准函数。
codecvt
应该有帮助,标准提供了 UTF-8 的实现,例如codecvt_utf8<char32_t>()
在这种情况下是合适的。
大概是这样的:
wstring_convert< codecvt_utf8<char32_t>, char32_t >().from_bytes(the_std_string).size()
如果没有 3rd 方库,在 C/C++ 中无法做到这一点。即使您转换为 char32_t,您也会得到代码点,而不是字符。
由于分解格式、连字、变体选择器等原因,代码点与用户对字符的感知不匹配。
最接近“用户字符”的可用构造是“字素簇”(参见http://www.unicode.org/reports/tr29/)
您最好的跨平台选择是 ICU4C ( http://site.icu-project.org/ )
实际长度是字节数。计算代码点没有什么意义。您可能想计算其他事物,例如字形簇。
在http://utf8everywhere.org中查看更多关于不同类型字符串长度的信息