Форум программистов, компьютерный форум CyberForum.ru

Русский язык в консоли - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.08.2014, 16:18     Русский язык в консоли #1
Здравствуйте. Чего-то не разберусь с русским языком.

C++
1
setlocale(LC_ALL,"RUSSIAN");
и
C++
1
setlocale(LC_ALL,"1251");
- классно.

Мне нужно вводить выводить с клавиатуры, а так же из текстового файла. Одна из выше строк помогает при работе с файлом, вторая - для клавиатуры. Т.е. один вариант помогает ввести с клавиатуры русский текст, но в то же время при выводе из файла странный набор символов, соответственно, наоборот, второй вариант адекватно выводит из файла, но с клавы - крокозяблики. Я должен использовать переключение динамически, в зависимости с чем работаю или есть более универсальные способы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
21.08.2014, 16:33     Русский язык в консоли #2
Цитата Сообщение от Retyrn0 Посмотреть сообщение
или есть более универсальные способы?
Выучить английский язык например.
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 16:45     Русский язык в консоли #3
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
прочитай про них... правда на XP у меня они не работают...
gru74ik
Модератор
 Аватар для gru74ik
3490 / 1499 / 180
Регистрация: 20.02.2013
Сообщений: 4,333
Записей в блоге: 21
21.08.2014, 17:32     Русский язык в консоли #4
Retyrn0, тут смотрели? Ещё есть поиск по форуму, там вот что дают. Ну и гугл модно тож.
ranebull
 Аватар для ranebull
512 / 345 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
21.08.2014, 17:37     Русский язык в консоли #5
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Здравствуйте. Чего-то не разберусь с русским языком.
Напишите IDE, в которой работаете и прикрепите код программы.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.08.2014, 20:25  [ТС]     Русский язык в консоли #6
Цитата Сообщение от Ryuk Посмотреть сообщение
Выучить английский язык например.
Спасибо. А если я пишу базу данных, мне всех пользователей нужно заставлять писать исключительно на английском языке всё? Обожаю такие ответы)

Добавлено через 3 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение
тут смотрели?
"Извините, нет совпадений. Попробуйте указать другие ключевые слова."
Цитата Сообщение от gru74ik Посмотреть сообщение
вот что дают
Я пробовал множество способов, но во всех темах вопрос по языку ввода - с этим проблем нет, по языку файла - тоже не проблема, а работа и с тем и другим на русском не работают. Один способ помогает только с вводом-выводом, второй только с файлами, а чтобы и то и другое работало одновременно не выходит.
KOPOJI
Модератор
 Аватар для KOPOJI
16575 / 6516 / 400
Регистрация: 12.06.2012
Сообщений: 19,535
Завершенные тесты: 1
21.08.2014, 20:29     Русский язык в консоли #7

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
там вот что дают
Что дают? Предупреждение о нарушении правил за отсыл в поиск?


Цитата Сообщение от Retyrn0 Посмотреть сообщение
setlocale(LC_ALL,"RUSSIAN");
а в консоли меняли шрифт? И вообще, хоть бы сообщили ОС, редактор
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.08.2014, 20:32  [ТС]     Русский язык в консоли #8
Цитата Сообщение от ranebull Посмотреть сообщение
Напишите IDE, в которой работаете и прикрепите код программы.
VS2008 С++.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
void main()
{
//  SetConsoleCP("1251");
//  SetConsoleOutputCP("1251");
//  setlocale(LC_ALL,"Russian");
//  setlocale(LC_ALL,"1251");
//  setlocale (LC_ALL, "RUS.UTF-8");
 
    char str[2048];
    gets(str);
    puts(str);
    FILE*file=fopen("1.txt","rt");
    fgets(str,2048,file);
    puts(str);
    fclose(file);
}
Собственно, я уже создал отдельный проект, чтобы исключить разные чудеса функций - вот этот простой пример не работает. Я раскомментирую одну из строк вверху - включается либо только русский при вооде-выводе с клавиатуры-на экран, либо только правильно отображается русский текст из файла, но одновременно и тот и другой вариант не работают.

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
а в консоли меняли шрифт?
хм..возможно это поможет...сейчас попробую. Просто setlocal помог и язык отображается правильно, но только в одном из случаев.
KOPOJI
Модератор
 Аватар для KOPOJI
16575 / 6516 / 400
Регистрация: 12.06.2012
Сообщений: 19,535
Завершенные тесты: 1
21.08.2014, 20:41     Русский язык в консоли #9
Ну у меня и без всяких локалей отлично отображает русский текст. Правда, проверял только с консолью, файл влом создавать.. И VS2013 (Express)..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    //  SetConsoleCP("1251");
    //  SetConsoleOutputCP("1251");
    //  setlocale(LC_ALL,"Russian");
    //  setlocale(LC_ALL,"1251");
    //  setlocale (LC_ALL, "RUS.UTF-8");
 
    char str[2048];
    gets(str);
    puts(str);
    /*FILE*file = fopen("1.txt", "rt");
    fgets(str, 2048, file);
    puts(str);
    fclose(file);*/
    getchar();
    return 0;
}
Русский язык в консоли
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.08.2014, 20:43  [ТС]     Русский язык в консоли #10
C++
1
2
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
- Вот средство, но нужно ещё менять шрифт умолчания консоли, а
C++
1
setlocale(...);
с разнообразными аргументами не дают универсального метода.
Спасибо, тема закрыта.

Добавлено через 1 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
файл влом создавать
В том и проблема была - отдельно или с тем или с другим - порядок, ног чтобы и то и другое отображалось адекватно не получалось.
KOPOJI
Модератор
 Аватар для KOPOJI
16575 / 6516 / 400
Регистрация: 12.06.2012
Сообщений: 19,535
Завершенные тесты: 1
21.08.2014, 20:47     Русский язык в консоли #11
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вот средство, но нужно ещё менять шрифт умолчания консоли
Параметр для консольной строки - шрифт Lucida Console

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdafx.h"
#include <Windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hCon = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    if (hCon != INVALID_HANDLE_VALUE) {
        CONSOLE_FONT_INFOEX cfi;
        cfi.cbSize = sizeof(CONSOLE_FONT_INFOEX);
        cfi.nFont = 0;
        cfi.dwFontSize.X = 0;
        cfi.dwFontSize.Y = 12;
        cfi.FontFamily = FF_DONTCARE;
        cfi.FontWeight = 400;
        wcscpy(cfi.FaceName, L"Lucida Console");
        SetCurrentConsoleFontEx(hCon, FALSE, &cfi);
    }
 
    char str[2048];
    gets(str);
    puts(str);
    /*FILE*file = fopen("1.txt", "rt");
    fgets(str, 2048, file);
    puts(str);
    fclose(file);*/
    getchar();
    return 0;
}
Работает..
zer0mail
2220 / 1903 / 192
Регистрация: 03.07.2012
Сообщений: 6,811
Записей в блоге: 1
21.08.2014, 21:23     Русский язык в консоли #12
Retyrn0, по поводу кодировок советую почитать: http://zelserg.livejournal.com/2117.html
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
22.08.2014, 00:40  [ТС]     Русский язык в консоли #13
Цитата Сообщение от KOPOJI Посмотреть сообщение
Работает..
Спасибо, попробую позже, пока нет возможности. Я правильно понимаю, что и текст из файла будет правильно отображаться?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2014, 03:07     Русский язык в консоли #14
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Код C++1
2
* * SetConsoleCP(1251);
* * SetConsoleOutputCP(1251);- Вот средство, но нужно ещё менять шрифт умолчания консоли
Есть способ (для студии) не менять шрифт по умолчанию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Шрифт точечный. Русский ввод и вывод без  настройки шрифта (берётся по умолчанию)
// В Code::Blocks не будет работать (отсутствует кодировка 866 )
 
#include <cstdlib>
#include <string>
#include <windows.h>
using namespace std;
 
int main ()
{    
    setlocale(0, "");
    cout << "Русский ввод!" << endl;
    
    SetConsoleCP(1251);
    string str;
    cin >> str;
    SetConsoleCP(866);
    
    cout << str << endl;
    
   system("pause");
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 05:36     Русский язык в консоли
Еще ссылки по теме:

Русский язык в консоли C++
Русский язык в консоли C++
C++ Указатель и снова про русский язык в консоли
Русский язык в консоли C++
C++ Не отображается русский язык в консоли даже с популярными решениями

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
 Аватар для gru74ik
3490 / 1499 / 180
Регистрация: 20.02.2013
Сообщений: 4,333
Записей в блоге: 21
22.08.2014, 05:36     Русский язык в консоли #15
Цитата Сообщение от gru74ik Посмотреть сообщение
Retyrn0, тут смотрели?
Имелась ввиду тема Русские шрифты в консоли (на 6 страниц), которая находится в шапке раздела С++ для начинающих.
Yandex
Объявления
22.08.2014, 05:36     Русский язык в консоли
Ответ Создать тему
Опции темы

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