Здравствуйте, Rakafon, Вы писали: R>У винды с русской локализацией (CP1251) консоль работает в кодировке DOS-86. Чтобы поддержать всякой досовское старьё видимо. Соответственно для того чтобы std::wcout, который как мы знаем на винде с активной русской локалью CP1251 пишет текст в кодировке CP1251, для того чтобы std::wcout мог внятно по-русски написать в консоль, надо ему подсказать, что данные, которые ему заходят через оператор << в текстовой кодировке CP1251, в целевом файле (т.е. в консоли) должны сидеть в кодировке DOS-866, а не в кодировке CP1251, и это достигается вызовом std::wcout.imbue(std::locale("rus_rus.866"));.
Тут ошибка, должно быть так:
У винды с русской локализацией (CP1251) консоль работает в кодировке DOS-866. Чтобы поддержать всякой досовское старьё видимо.
Все потоковые классы, в том числе и std::wcout, по умолчанию пишут в простой текстовый файл, в том числе и в консоль. Соответственно для того чтобы std::wcout, который как мы знаем на винде с активной русской локалью CP1251 пишет текст в кодировке CP1251, для того чтобы std::wcout мог внятно по-русски написать в консоль, надо ему подсказать, что данные, которые ему заходят через оператор << в текстовой кодировке UTF-16LE, в целевом файле (т.е. в консоли) должны сидеть не в кодировке CP1251 (как обычно), а в кодировке DOS-866, и это достигается вызовом [i]std::wcout.imbue(std::locale("rus_rus.866"));
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.