std::setlocale 与 MB_CUR_MAX

std::setlocale vs MB_CUR_MAX

提问人:Irbis 提问时间:7/19/2023 最后编辑:Nicol BolasIrbis 更新时间:7/19/2023 访问量:34

问:

我在 Linux 上工作。在我的C++应用程序中,我以这种方式设置区域设置:

std::setlocale(LC_ALL, "en_US.UTF-8");

在那之后等于 .你能解释一下为什么吗?我以为将 locale 设置为 4 后将等于 4,因为 UTF-8 最多使用 4 个字节。MB_CUR_MAX6UTF-8MB_CUR_MAX

C++ UTF-8 C++17 语言环境

评论


答:

2赞 Nicol Bolas 7/19/2023 #1

Unicode 代码点使用 32 位无符号整数。UTF-8 最初的定义方式是它可以对该范围内的所有值进行编码。但是,UTF-16 不是;它只能编码 21 位范围。因此,Unicode 标准委员会认为 21 位就足够了。因此,UTF-8 目前仅使用 4 个字节,而不是它可以用来覆盖整个 32 位范围的 6 个字节。

也许您的语言环境实现没有意识到这一点,并且以某种方式支持旧版本的 UTF-8。