Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.71
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 448
#1

Не работает setlocale(LC_ALL,"Russian") или Говорим по русски - C++

18.11.2013, 00:08. Просмотров 12519. Ответов 22
Метки нет (Все метки)

оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3 оболочках
C++Builder, CodeBlocks, MS VisualStudio 2008 давал русские буквы только в Visual Studio. В остальных-не работал.
Почему? Мне удобно в разных местах не завязываться только с VisualStudio а нужен надежный способ вывода русского текста вне зависимости от оболочки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 00:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает setlocale(LC_ALL,"Russian") или Говорим по русски (C++):

Не работает "setlocale( LC_ALL,"Russian" )" - C++
В одной программе setlocale( LC_ALL,"Russian" ) работает, а в другой, ничем не отличающейся от первой, нет. В чем дело?

Не правильное значение при использовании {setlocale (LC_ALL, "Russian"); - C++
Почему после подключения команды #include <locale.h> ... setlocale (LC_ALL, "Russian"); программа начинает выдавать не правильный результат...

Чем можно заменить функцию setlocale(LC_ALL, "RUSSIAN")? - C++
напишите пожалуйста пример!!

Функция setlocale( LC_ALL,"Russian" ) и класс String - C++
У меня есть класс и головная функция этого класса. Переменные типа стринг я могу водить в консоли, ну как только я подключаю функцию...

Неправильное отображение русского текста в консоли при использовании setlocale(LC_ALL, "Russian") - C++
Ребят, такая ситуация, прописал setlocale(LC_ALL, "Russian");но в консоли вместо текста на русском-набор букв, в чем может быть...

setlocale( LC_ALL,"Russian" ); - C++
#include <iostream> #include <string> using namespace ::std; void main () { setlocale( LC_ALL,"Russian" ); string a; cout <<...

22
dima55501
30 / 34 / 6
Регистрация: 14.07.2013
Сообщений: 146
18.11.2013, 00:30 #2
Попробуй подключать
Код
#include <clocale>
Ну или используй
C++
1
2
3
4
5
6
<include <Windows.h>
int main()
{
       SetConsoleCP(1251);
       SetConsoleOutputCP(1251);
}
0
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 448
18.11.2013, 00:55  [ТС] #3
Проверил- не помогло. Правда под чистым С вообще не понимает константу LC_ALL а при подключении
#include <clocale> хоть компилит, но русского нет. Так же и с SetConsoleCP(1251);
SetConsoleOutputCP(1251); в С++Builder
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 01:42 #4
Цитата Сообщение от eugrita Посмотреть сообщение
Проверил- не помогло.
Чтобы это работало, нужно в свойствах консоли выбрать шрифт Lucida Console.
0
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 448
18.11.2013, 01:57  [ТС] #5
Это в каких свойствах? Если в свойствах редактора то проге после компиляции на это наплевать.А в свойствах проекта- свойствах компилятора, Compiler?Advanced Compiler?Linker -такого нет
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 02:24 #6
Цитата Сообщение от eugrita Посмотреть сообщение
Это в каких свойствах?
Установка шрифта Lucida Console
1
ranebull
523 / 356 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 07:09 #7
Цитата Сообщение от eugrita Посмотреть сообщение
оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3 оболочках
C++Builder, CodeBlocks, MS VisualStudio 2008 давал русские буквы только в Visual Studio. В остальных-не работал.
Почему? Мне удобно в разных местах не завязываться только с VisualStudio а нужен надежный способ вывода русского текста вне зависимости от оболочки.
Borland,CodeGear,Embarcadero C++ Buider:
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma hdrstop
#pragma argsused
#include<iostream.h>
#include<windows.h>
main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Привет\n";
    system("pause");
}
Code::Blocks:
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
#include<locale>
#include<cstdlib>
int main()
{
    setlocale(LC_CTYPE,"Russian");
    std::cout<<"Привет\n";
    system("pause");
}
Visual Studio:
1 вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include<iostream>
#include<Windows.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    std::cout<<"Привет\n";
    system("pause");
}
2 вариант:
C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include<iostream>
#include<locale>
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    std::cout<<"Привет\n";
    system("pause");
}
0
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
18.11.2013, 09:04 #8
Цитата Сообщение от eugrita Посмотреть сообщение
оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3
setlocale не предназначен для смены кодовых страниц, у ВС это побочный эффект. Тут только два универсальных способа либо менять кодировку самой консоли SetConsoleCP()\SetConsoleOutputCP(), либо перекодировать строки CharToOem()\OemToChar(). Второй более предпочтительный, потому что не требует пляски с бубном в виде смен шрифта в консоли.
Есть еще один способ, работать в текстовом редакторе поддерживающим кодировку ОЕМ 866 и набирать прогу в нем.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 10:05 #9
Цитата Сообщение от ranebull Посмотреть сообщение
Code::Blocks:
#include<iostream>
#include<locale>
#include<cstdlib>
int main()
{
setlocale(LC_CTYPE,"Russian");
std::cout<<"Привет\n";
system("pause");
}
В Code::Blocks такое не работает.
В студиии, setlocale(LC_CTYPE,"Russian"), только на вывод.
0
zss
Модератор
Эксперт С++
6536 / 6098 / 2008
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
18.11.2013, 10:33 #10
Советую пользоваться функциями преобразования консольных кодов в Windows и наоборот
OemToAnsi(char* to,char* from);
AnsiToOem(char* to,char* from);
0
SatanaXIII
18.11.2013, 10:38
  #11

Не по теме:

Советую вообще не пользоваться в консоли русскими буквами.

0
SBT
4 / 4 / 1
Регистрация: 18.08.2012
Сообщений: 62
18.11.2013, 10:42 #12
Я лично просто перевожу кодировку файла в OEM866(комплируемого), и русский отлично отображаеться.
0
ranebull
523 / 356 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 13:48 #13
Цитата Сообщение от alsav22 Посмотреть сообщение
В Code::Blocks такое не работает.
В студиии, setlocale(LC_CTYPE,"Russian"), только на вывод.
В смысле не работает? Я сам для проверки написал код, а только потом отправил его.
0
Миниатюры
Не работает setlocale(LC_ALL,"Russian") или Говорим по русски  
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 13:58 #14
Цитата Сообщение от ranebull Посмотреть сообщение
В смысле не работает?
В прямом смысле. ОС? Code::Blocks?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 14:04 #15
...
0
Миниатюры
Не работает setlocale(LC_ALL,"Russian") или Говорим по русски  
18.11.2013, 14:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 14:04
Привет! Вот еще темы с ответами:

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, &quot;&quot;)); cout &lt;&lt; endl; printf(setlocale(LC_ALL, &quot;&quot;)); выдают одинаковый результат (ну, на моей...

Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать - C++
Программа сначала считывает данные с файла, потом сортирует их и сохраняет. Мне нужно было сделать меню на русском, но после добавления...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел - C++
Вставить пробел после каждого символа &quot;.&quot; &quot;,&quot; &quot;!&quot; или &quot;?&quot;, если за этими символами не следует пробел (т. е. следует любой символ, кроме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru