Как узнать "родную" std::locale текущей операционной системы (юзера?)

Тема в разделе "LANGS.C", создана пользователем _DEN_, 20 май 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Если у std::wcout спросить текущую локаль, то он скажет, что она --- "C". При этом у меня "родная" локаль - "rus_rus.866". Выражается это вот в чем: boost::filesystem (да и не только он) генерирует исключения, в которых описание ошибки (std::exception::what) написано русским языком. Возникает вопрос - как превратить это дело в юникод средствами C++? Например, можно слить это дело в std::wstringstream. Но тогда возникает вопрос - какой локалью наделить поток? Точнее - где эту локаль взять? Может быть как-то можно спросить у буста?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    На самом деле все немного сложнее)

    Вот так в оконном консольном режиме мы на экране увидим русские буквы:

    Код (Text):
    1. std::wcout.imbue("rus_rus.866"); // Об этой локали должен заботиться тот, кто отображает инфу. Меня этот "тот" не интересует.
    2.  
    3. ...
    4.  
    5. catch(std::exception const& e) // Исключение кинула boost::filesystem
    6. {
    7.     std::wstringstream stream;
    8.  
    9.     // Об этой локали должен заботиться тот, кто решил выдать описание ошибки в юникоде. Вот как этому "тому" узнать эту локаль, меня и интересует
    10.     stream.imbue(std::locale("rus_rus.1251"));
    11.  
    12.     stream << e.what();
    13.     std::wcout << stream.str();
    14. }