我使用下面的代码来格式化数字,使用正确的地方语言。当使用法语时,数字组之间有 "非中断的空间"。我得到的字符串似乎是无效的。
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 SPACE(不含空格)。0xC2 (-62) 0xA0 (-96)
被截断,您只能看到第一个代码单元。0xC2 (-62)
这是一个无效的部分UTF-8。