使用 std::locale 格式化法语数字时无效的 UTF-8 数据



我使用以下代码使用正确的语言环境格式化数字。使用法语时,数字组之间有"不间断空格"。我得到的字符串似乎无效。

std::stringstream ss;
ss.imbue(std::locale("fr_FR.UTF-8"));
ss << 1234;
auto result = ss.str();

在这里,result是:{49, -62, 50, 51, 52}.不间断空格用 -62 表示。在我看来,它是无效的 UTF-8,对吧?

我希望result是:{49, -62, -96, 50, 51, 52}(在这种情况下,这似乎是有效的,不间断的空格用两个字符表示:-62,-96(。

我错过了什么吗?感谢您的帮助。

问题是std::locale不支持多字节数字分隔符,因为std::numpunct::thousands_sep只返回一个代码单元(在这种情况下char(。因此,在您的情况下,数字分隔符 NO-BREAK SPACE0xC2 (-62) 0xA0 (-96)被截断,您只能看到第一个代码单元0xC2 (-62)这是一个无效的部分 UTF-8。

相关内容

最新更新