有效的区域设置名称

Mar*_*ork 22 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
Run Code Online (Sandbox Code Playgroud)

Nic*_*cue 21

这个页面说:

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

locale -a 应该适合你.

如果你的意思是从C++ std libary编程,我不确定.

这个堆栈溢出问题可能也是相关的,但他似乎没有太多的回应.

编辑

要使用UTF-16,您可能需要使用此问题中提到的libiconv.