3

任何标准库中是否有任何本机(跨平台)C++函数返回实际长度std::string

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

4

3 回答 3

6

codecvt应该有帮助,标准提供了 UTF-8 的实现,例如codecvt_utf8<char32_t>()在这种情况下是合适的。

大概是这样的:

wstring_convert< codecvt_utf8<char32_t>, char32_t >().from_bytes(the_std_string).size()
于 2013-05-31T19:02:53.013 回答
1

如果没有 3rd 方库,在 C/C++ 中无法做到这一点。即使您转换为 char32_t,您也会得到代码点,而不是字符。

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

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

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

于 2013-06-03T17:33:20.280 回答
1

实际长度是字节数。计算代码点没有什么意义。您可能想计算其他事物,例如字形簇。

在http://utf8everywhere.org中查看更多关于不同类型字符串长度的信息

于 2013-06-01T23:48:58.200 回答