Например, если я пишу:
cout << "Привет!" << endl; //it's hello in Russian
В консоли это было бы что-то как ╧ЁштхЄ!
.
Хорошо, я знаю, что мы можем использовать:
setlocale(LC_ALL, "Russian");
Но после этого, параметры командной строки на русском языке не работают (если я запускаю свою программу через Bat-файл):
StartProgram.bat
chcp 1251
MyProgram.exe -user=Олег -password=Пароль
Так, после setlocale
программа не может считать российские аргументы правильно.
Это происходит, потому что файл the Bat в CP1251, но консоль находится в CP866.
Так, существует вопрос:
Как я могу писать по-русски текст в консоли C++ и в то же время, российские параметры командной строки читали правильно.
Вы пробовали использовать wcout
? Он похож на cout
, но принимает «широкие» символы, что должно допускать правильное кодирование Unicode.
Эта статья о локализации и другая , обе из MSDN могут быть полезны.
Установили ли вы русский язык для программ, отличных от Unicode, в разделе «Язык и региональные стандарты» панели управления?
(У меня есть я не знаю, какова может быть обычная установка для русскоязычных программистов; я просто задаюсь вопросом, распространено ли это установить на какой-то английский, чтобы не сбивать с толку слишком узкие инструменты.)
Если моя память не играет трюков, когда я работал с некоторым кодом от японских разработчиков, именно на этом шаге консоль правильно отображала не-Unicode японский текст (кодировка Shift-JIS).