Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/3375: Рейтинг темы: голосов - 3375, средняя оценка - 4.85
36 / 36 / 3
Регистрация: 17.07.2008
Сообщений: 581

Русские шрифты в консоли

02.08.2008, 16:35. Показов 633797. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как написать сообщение с русскими буквами, чтоб нормально показывала? Например:
cout<<"hello world"; выводить сообщение нормальна? с английсками шрифтами
cout<<"привет мир"; выводить в каком не понятном языке, какие та закавычки.

Подобные темы:
24
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2008, 16:35
Ответы с готовыми решениями:

Русские шрифты в консоли - продолжение
Всем привет. Я вижу(и прочитал) прилепленную тему на верху, но ответа на свой ньюанс не нашел. Есть такая программа, написанная на...

Очередные русские шрифты в консоли...
Помогите пожалуйста) вот код: #include &lt;iostream&gt; #include &quot;windows.h&quot; using namespace std; int (void) { ...

Как заставить консоль понимать русский язык? (русские шрифты в консоли)
Добрый вечер. Нужна ваша помощь С++ не понимает русский язык

60
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.08.2008, 16:58
CharToOem
Новичек, используй поиск.
10
 Аватар для yogurt
74 / 74 / 1
Регистрация: 02.08.2008
Сообщений: 107
02.08.2008, 18:04
я вот таким раком это делаю:
  • установить вручную шрифт Lucida Console в свойствах окна консоли
  • и запомнить это для всех окон с этим именем
  • записать в начале программы строку
    C++
    1
    
    #include <windows.h>
  • записать в начале функции main ( после строки с символом { ) две следующих строки
    C++
    1
    2
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
63
83 / 82 / 0
Регистрация: 16.08.2008
Сообщений: 3
21.08.2008, 21:58
Чет никто про эту конструкцию не говорит:
setlocale( LC_ALL,
"Russian" ); или
setlocale( LC_ALL,
"" );
77
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
22.08.2008, 01:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream.h>
#include<math.h>
#include<windows.h>
 
char bufRus[256];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
      
      
 
int main()  {
    cout << Rus("Привет ,Лопух!")<< endl;
    system("pause");
    return 0;
    
}
20
smorodov
02.02.2009, 21:45
В GCC проходит такое:

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 <stdio.h>
#include <windows.h>
 
void print(const char *fmt, ...)
{
 char    text[256];      // Место для нашей строки
  va_list    ap;         // Указатель на список аргументов
 
if (fmt == NULL)     // Если нет текста
    return;          // Ничего не делать
 
  va_start(ap, fmt);           // Разбор строки переменных
      vsprintf(text, fmt, ap); // И конвертирование символов в реальные коды
  va_end(ap);                  // Результат помещается в строку
 
   char* tmp;
   tmp = new char[strlen(text) + 1];
   CharToOem(text, tmp);
   printf("%s",tmp);
   delete [] tmp;
}
 
int main()
{
print("Пресс эни кей! %f\n",124);
getchar();
return 0;
}
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,299
23.05.2009, 15:37
Можно еще так
C++
1
system("chcp 1251");
, а потом
Цитата Сообщение от yogurt Посмотреть сообщение
// установить вручную шрифт Lucida Console в свойствах окна консоли
// и запомнить это для всех окон с этим именем
.

Цитата Сообщение от VicAlex Посмотреть сообщение
Чет никто про эту конструкцию не говорит:
setlocale( LC_ALL,"Russian" ); или
setlocale( LC_ALL,"" );
у меня в борланде такая конструкция не прокатывает, а в ВС вывод русскими, ввод русскими, а повторный вывод ввода иероглифами.


Цитата Сообщение от ABTOP Посмотреть сообщение
Я давно пользуюсь этим извращением... Установил Far Manager (http://www.farmanager.com/) открываю исходник через него, переключаюсь на ДОСовскую кодировку (сверху над текстом по середине пишеться DOS или Win, кодировка меняетсья клавишей F8 ) и набираю текст на русском языке, сохраняю и открываю исходник через компилятор... В компиляторе русский текст пишеться иероглифами но при выполнении программы всё нармально и пишеться по русски...
, можно еще извращенее - <Alt> + код(в ДОСовской кодировке) на цифрой клавиатуре.
15
11 / 11 / 1
Регистрация: 27.04.2009
Сообщений: 30
23.05.2009, 15:59
Есть вот такой вариант
Руссификация консоли в с++
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
#include <iostream>
#include <windows.h>
 
 
// Функция перекодировки в кирилицу
char* rus(char* st)
{
unsigned char* p = st; // при объявлении символов как char русские буквы
// кодируются отрицательными числами
while( *p ){
if(*p >= 192) // здесь русская буква
if(*p <= 239)
*p -= 64;
else
*p -= 16;
p++;
}
return st;
}
 
int main()
{
cout << rus("Ура, получилось!") << endl;
cin.get();
return 0;
}
Эта байда работает норм вроде в любом компиляторе, но замеченны бока при использовании в циклах, хз почему появляются кракозябры на 2+ итерации.
ЗЫ, ф-цию нагло спер не помню где.

Еще есть вышезамеченный
setlocale(LC_ALL,"");
но вывод при этом должен выглядть примерно так
wcout<<L"Дарова, мир!"<<endl;
6
 Аватар для System.exe
92 / 88 / 58
Регистрация: 14.05.2009
Сообщений: 202
23.05.2009, 22:12
Примерно так:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
void main()
{
char name[записываешь количество символов , которое состовляет русская строка];
CharToOem(name, 'записываешь сам текст строки');
cout<<name<<"\n";
return 0;
}
4
45 / 45 / 1
Регистрация: 23.05.2009
Сообщений: 92
04.06.2009, 12:35
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
#include <iostream>
#include <windows.h>
 
 
// Функция перекодировки в кирилицу
char* rus(char* st)
{
    unsigned char* p = st; // при объявлении символов как char русские буквы
    // кодируются отрицательными числами
    while( *p ){
        if(*p >= 192) // здесь русская буква
        if(*p <= 239)
        *p -= 64;
        else
        *p -= 16;
        p++;
    }
        return st;
}
 
int main()
{
    cout << rus("Ура, получилось!") << endl;
    cin.get();
    return 0;
}
Эта байда работает норм вроде в любом компиляторе, но замеченны бока при использовании в циклах, хз почему появляются кракозябры на 2+ итерации.
ЗЫ, ф-цию нагло спер не помню где.

Еще есть вышезамеченный
C++
1
setlocale(LC_ALL,"");
но вывод при этом должен выглядть примерно так
C++
1
wcout<<L"Дарова, мир!"<<endl;
Ты сам эту байду компилировал или текст с какого-то сайта скопировал, как у тебя преобразовается 9 линия кода из char* в unsigned char*?
9 линию кода следует заменить на
C++
1
char* p = st;
Зачем вообще изобретать какие-то новые функции перекодирования, если функция CharToOem работает корректно, а эта просто пишет русские буквы в корявом порядке
5
Заказ софта
 Аватар для Search..
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
06.06.2009, 02:24
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h> /* Для printf */
#include <locale.h> /* Для русского языка */
 
int main(int argc, char * argv [])
{
    setlocale(LC_ALL,"Rus"); /* Обязательно должно быть первым */
    printf("Русский язык !\n");
 
    return 0;
}
12
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
09.06.2009, 12:10
Я только щас заметил, что gcc (или Linux) выводит правильно русские буквы без всяких ухищрений.
И это:
C
1
2
3
4
5
#include <stdio.h>
 
main(){
   printf("Привет мир!\n");
}
и это:
C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
 
int main(){
   cout << "Привет мир!\n";
   return 0;
}
выводится абсолютно нормально.
5
5 / 5 / 0
Регистрация: 16.06.2009
Сообщений: 21
16.06.2009, 20:22
Я просто описываю функцию
C++
1
2
3
4
5
6
char bufRus[256];
    char *Rus(const char *text)
    {
        CharToOem(text,bufRus);
        return bufRus;
    }
а затем при необходимости печати кириллицей пишу так
cout <<Rus(" Проверка (A - lam*E)*X =0")<< endl;
или
printf(Rus(" Сегодня"));
4
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
16.06.2009, 20:29
На другом форуме увидел
setlocale - стандартный для Си способ, для С++ лучше использовать std::locale, так как это работает более локально(lol)
C++
1
2
std::locale loc("Russian");
std::cout.imbue(loc);
или аналог setlocale
C++
1
2
std::locale loc("Russian");
std::locale::global(loc);
В связи с правилами форума дать ссылку на источник не могу.
6
11 / 11 / 1
Регистрация: 27.04.2009
Сообщений: 30
18.06.2009, 11:36
Цитата Сообщение от Skirmisher Посмотреть сообщение
Ты сам эту байду компилировал или текст с какого-то сайта скопировал, как у тебя преобразовается 9 линия кода из char* в unsigned char*?
9 линию кода следует заменить на
Зачем вообще изобретать какие-то новые функции перекодирования, если функция CharToOem работает корректно, а эта просто пишет русские буквы в корявом порядке
У меня все отлично работает. У моих знакомых тоже работает. Также подозреваю, что есть такие таблицы ASCII, и что в этих таблицах кодируются символы алфавитов и всяких знаков. И что кодирование там происходит от 0..255, что равно 8бит, что являеться unsigned char, и как написано в комменте русские букавы при обьявлении char кодируются отрицательными символами,т.е -128..0. Примерно так всё и происходит.
Не знаю, мб, где-то и не работает. Если не верится, что у меня пашет, могу даже скрины выложить где-нить)
1
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
06.07.2009, 11:04
В любой нормальной книге написано , что windows - не самая лучшая среда для изучения программирования , g++ всё на русском UTF-8 стоит , писать можно хоть на албанском .
MS-DOS с UTF-8 подружить можно ?
1
6 / 5 / 0
Регистрация: 15.07.2009
Сообщений: 7
15.07.2009, 04:51
Надо, наверно, сказать явно в чём, собственно, проблема.
Проблема в том, что редактор, в котором набирается программа, и, следовательно, файлы, в которых записан её текст, использует другую кодировку, чем кодировка консоли, в которой печатаются выводимые сообщения.(редактор - codepage 1251, консоль - codepage 866).
Лучшим вариантом было бы чтобы эти кодировки так или иначе совпадали. Это можно сделать путём перенастройки консоли или перенастройки редактора.
Другой метод - хранить используемые программой строки отдельно и перекодировать в нужную кодировку (в версии MS - это, видимо, строковые "ресурсы"; к сожалению, работа с ними несколько сложнее, чем следует) :-(.
Ну и самый простой на мой взгляд метод. Простая перекодировка исходных файлов программ (целиком) в нужную кодировку (codepage 866). К сожалению, MS сделал, похоже, всё, что мог, для усложнения этой задачи. Кто-то тут говорил, что пользуется FAR... :-) Есть одна хорошая UNIX-программа: iconv. Преобразует много кодировок, включая unicode. Читает ввод со стандартного ввода и пишет результат на стандартный вывод :-)
Используется, например, так: iconv -fcp1251 -tcp866 <source.c >source866.c . Затем надо компилировать source866.c .
Может понадобиться ещё и опция -c.
Неплохо будет смотреться небольшой скрипт, перекодирующий (с помощью iconv) все, скажем, .c и .h файлы в заданной директории... :-)
4
4 / 4 / 0
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 19:06
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<math.h>
#include<windows.h>
 
char bufRus[600];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
Из за чего может быть ошибка?

Error : data object 'bufRus' redefined
rus.h line 5 char bufRus[600];
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
16.07.2009, 19:22
Цитата Сообщение от Alex M Посмотреть сообщение
Error : data object 'bufRus' redefined
rus.h line 5 char bufRus[600];
объект с таким именем уже объявлен - bufRus
0
4 / 4 / 0
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 19:42
Цитата Сообщение от polivets Посмотреть сообщение
объект с таким именем уже объявлен - bufRus
мммм, это наверное из за того что в одном проекта я создал функции в отдельных файлах
и к ним прописаны #include "rus.h", как избижать этой ошибки?

C++
1
2
3
4
5
6
7
8
9
10
11
12
файл rus.h
 
#include<iostream>
#include<math.h>
#include<windows.h>
 
char bufRus[600];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Проект
1-файл
#include <iostream>
#include "rus.h"
 
2-файл функции
#include<iostream>
#include "buyAmmo.h"
#include "rus.h"
 
3-файл фунции
#include<iostream>
#include "cityMap.h"
#include "rus.h"
и возникает ошибка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2009, 19:42
Помогаю со студенческими работами здесь

Русские шрифты в c++
Работаем в Visual Studio 2010. В char переменную пишем информацию русскими символами, сохраняем, записываем в файл, читаем из файла и...

Чтения из файла Русские шрифты
Не могу не как догнать перепробовал много вариантов не получается ,помогите разобраться. ...

Значения переменных - русские шрифты
Здравствуйте, такая проблема: Как сделать так чтобы если я создал string tmp = &quot;й,ц,у,К,Е,Н,г,Ш,щ&quot;; то чтобы и работало с русскими...

Русские буквы консоли
Знаю что таких тембыло очень много, но у меня никак не получается вывести слово &quot;Привет&quot; в консоли. Пробую так ...

Русские буквы в консоли
У меня прекрастно выводятся русские буквы в консоль, но если я ввожу русский текст в какуюту переменную, то вывести ее коректно не...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru