c++ - 有效的语言环境名称

标签 c++ locale utf-16

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

我目前使用的是 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

最佳答案

This page says:

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

locale -a 应该适合你。

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

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

编辑

要使用 UTF-16,您可能需要使用 libiconvthis question 中所述.

关于c++ - 有效的语言环境名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922713/

相关文章:

string - 检查字节序列是否包含utf-16

c# - 将数据从 C++ 传递到 C# 的最有效方法

c++ - 如果我执行 printf ("one\0two"会怎样;?

PHP音译指定语言环境

c - newlocale(3) 的掩码位具体是什么意思?

c# - Visual Studio GlobalSuppression.cs 文件和 UTF-16

C++ unicode UTF-16编码

c++ - 使 : *** No targets specified and no makefile found. 停止。 [Ubuntu]

c++ - 类变量 : public access read-only, 但私有(private)访问读/写

c - 将非 ASCII 字符分配给宽字符并使用 printf 打印