Если у std::wcout спросить текущую локаль, то он скажет, что она --- "C". При этом у меня "родная" локаль - "rus_rus.866". Выражается это вот в чем: boost::filesystem (да и не только он) генерирует исключения, в которых описание ошибки (std::exception::what) написано русским языком. Возникает вопрос - как превратить это дело в юникод средствами C++? Например, можно слить это дело в std::wstringstream. Но тогда возникает вопрос - какой локалью наделить поток? Точнее - где эту локаль взять? Может быть как-то можно спросить у буста?
На самом деле все немного сложнее) Вот так в оконном консольном режиме мы на экране увидим русские буквы: Код (Text): std::wcout.imbue("rus_rus.866"); // Об этой локали должен заботиться тот, кто отображает инфу. Меня этот "тот" не интересует. ... catch(std::exception const& e) // Исключение кинула boost::filesystem { std::wstringstream stream; // Об этой локали должен заботиться тот, кто решил выдать описание ошибки в юникоде. Вот как этому "тому" узнать эту локаль, меня и интересует stream.imbue(std::locale("rus_rus.1251")); stream << e.what(); std::wcout << stream.str(); }