【问题标题】:Valid Locale Names有效的语言环境名称
【发布时间】:2010-12-27 17:17:24
【问题描述】:

如何找到有效的语言环境名称?

我目前正在使用 MAC OS X。
但有关其他平台的信息也会很有用。

#include <fstream>
#include <iostream>


int main(int argc,char* argv[])
{
    try
    {
        std::wifstream  data;
        data.imbue(std::locale("en_US.UTF-16"));
        data.open("Plop");
    }
    catch(std::exception const& e)
    {
        std::cout << "Exception: " << e.what() << "\n";
        throw;
    }
}

% g++ main.cpp
% ./a.out
Exception: locale::facet::_S_create_c_locale name not valid
Abort

【问题讨论】:

  • Martin 我修正了您在 Locale 中输入 Locale 的地方。我想您可能知道这一点,但它们是不同的,如果您输入错误,可能会影响您的谷歌搜索

标签: c++ locale utf-16


【解决方案1】:

This page says:

构造函数调用 std::locale("") 创建一个表示用户偏好的语言环境对象。该标准没有说明这意味着什么,但在许多系统上,该库用环境变量(通常是LANGLC_ALL)中的任何内容来代替空字符串。例如,美国语言环境的通用名称是“en_US”。 (在 POSIX 系统上,您可以键入 locale -a 以列出支持的语言环境的名称。)

locale -a 应该适合你。

如果你的意思是从 C++ 标准库以编程方式,我不确定。

This stack overflow question 可能也有相关性,但他似乎没有太多回应。

编辑

要使用 UTF-16,您可能需要使用 libiconv,如 this question 中所述。

【讨论】:

  • 成功了:我有 en_US.UTF-8 和 en_GB.UTF-8。但现在我需要解码一个 UTF-16 文件。
  • 好的,我已经扩展了答案。 libiconv 是我认为的简短答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多