【问题标题】:std::locale::facet::_S_create_c_locale name not validstd::locale::facet::_S_create_c_locale 名称无效
【发布时间】:2026-02-03 10:40:01
【问题描述】:

我正在尝试学习不同的语言环境和处理 unicode,我选择将我的所有字符串设为 UTF-8,我决定运行以下代码,但由于某种原因,它会引发错误,我无法弄清楚为什么......我到目前为止,尝试了所有语言环境,但除了“C”之外,没有一个可以工作。我尝试了这里找到的语言环境列表:http://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html

和他们的例子:

#include <iostream>
#include <string>

int main()
{
    std::locale::global(std::locale("en_US.UTF-8"));

    return 0;
}

结果:

在抛出 'std::runtime_error' 实例后调用终止
what(): locale::facet::_S_create_c_locale 名称无效

我做错了什么?

我在 Windows 8 上使用 Mingw-Builds gcc/g++ 4.8.1 和最新的代码块。语言设置为 EN_US,有时我切换到 EN_GB。

【问题讨论】:

  • 您的系统上是否安装了本地? Valid Locale Names
  • 你和std::locale::global(std::locale(""));有同样的错误吗见std::locale breakage on MacOS 10.6 with LANG=en_US.UTF-8
  • 我不确定您所说的“已安装的语言环境”是什么意思,但我的系统语言是 en_US,有时我会将其切换为 en_GB。使用std::locale("") 打印C 我没有那个错误。
  • 旧的编译器版本。
  • Gcc/g++ 4.8.1 带有最新代码块的窗口。我会将所有这些添加到 OP 中。

标签: c++ c++11


【解决方案1】:

上周我遇到了同样的问题,我编写了一个程序来打印 Windows 操作系统下所有支持的语言环境名称。

看我的回答Print all std::locale names (Windows)

您正在寻找的语言环境只是 Windows 下的“en-US”。

【讨论】: