#visual_studio #cpp #visual_cpp
This question already has answers here: Русский язык в консоли (4 ответа) Закрыт 4 года назад. Мне приходится писать английскими буквами русские слова в консольных приложениях. Сама программа русская (У мне Visual Studio 2010 express). Подскажите, что нужно сделать для возможности выводить русские буквы? Заранее спасибо. Нашел ответ(если кому надо) #includeint main() { setlocale(LC_ALL,"RUS");
Ответы
Ответ 1
Способ 1: используй wcout: #includeusing namespace std; void main() { wcout.imbue(locale(".866")); wcout << L"Привет, Мир!"; } Еще как вариант, можно подключить и использовать SetConsoleOutputCP(1251) Но у меня в 7ке почему-то этот способ не заработал, влом было разбираться. Но вроде для него надо было еще в настройках проекта какую-то галочку переключить, в общем, используй wcout, он и лучше, и работает не только в винде. Способ 2: Вспомнил еще один способ, пожалуй самый простой: setlocale(LC_ALL, "Russian"); cout << "Привет, Мир!" << endl; Ответ 2
Ничего не надо устанавливать. В идентификаторах разрешена только латиница. А в юникодных строках можно писать любые символы, включая китайские иероглифы. Пример. #includeint main() { wprintf(_T("Привет, мир\n")); return 0; } То, что пишется в строках: "Привет, мир" и т.п., должно помещаться внутрь макроса _T() для юникодных строк, а все остальное должно быть латиницей (за исключением комментариев). Ответ 3
Попробуйте этот вариант.ostream & operator<<(ostream & out,char* s) { char buf[512],*p=buf; CharToOem(s,buf); while(*p) out<<*p++; return out; } Ответ 4
Компилируя консольные приложения на славном языке программирования C++ постоянно сталкиваешься с проблемой кодировок. Русские буквы выводятся каракулями, а с английскими все в порядке. Дело в кодировках. В консоли Windows используется кодировка OEM. А в самой ОС Windows - ANSI кодировка. Для избежания проблем с выводом русских букв в консоль мы будем пользоваться функцией CharToOem. Функция CharToOem преобразует строку в набор символов ОЕМ. Эта функция противоположна функции AnsiToOem. Думаю вопрос закрыт :)Ответ 5
Ещё как вариант можно использовать _cwprintf, но она есть только в Visual C++.Ответ 6
Не знаю, сработает ли, но можно попробовать, например, если есть вариант в чар массиве на английском в ASCII таблице найти и заменить на русские, ну, например, (это только пример) английская буква А имеет цифру 20, а русская 60. Вы делаете функцию, которой, если дать массив, она заменит 20 цифру на 60, и программа покажет русскую а, но это с оператором cin не провернуть, наверное, не знаю.
Комментариев нет:
Отправить комментарий