Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Кириллица в консоли Windows  (Прочитано 20933 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алик
Постоялец

kz
Offline Offline

« : 19-08-2004 05:44 » 

Проблема: нужно, чтобы символы на консоль выводились в кодировке 1251 (а выводятся в 866, досовской).

Пробовал SetConsoleCP(1251) - не помогает, выводятся те же крякозяблики, хотя GetConsoleCP возвращает 1251.

Вот. Может, кто сталкивался?
Записан
xAL
Гость
« Ответ #1 : 19-08-2004 08:57 » 

Консоль работает в 866 кодировке, и единственное, что можно сделать - конвертировать все сообщения в 866, или работать с Unicode-версией консоли.

Вот исходник с конвертированием:
Код:
#include <iostream.h>
#include <string.h>
#include <windows.h>

ostream& operator << (ostream& stream, char* rout)
{
   char* tmp;
   tmp = new char[strlen(rout) + 1];
   CharToOem(rout, tmp);
   stream.write(tmp, strlen(tmp));
   delete [] tmp;
   return stream;
}

void main()
{
   cout << "Русский текст" << endl;
}

пролетал этот исходник тут не так давно и неоднократно, просто ссылку дольше искать, чем исходник Улыбаюсь

плюс где-то видел, где - не помню, описание как сделать консоль юникодной, сходу сказать не могу, если надо будет - поищу, или кто-нибудь, кто пользовался напишет.
« Последнее редактирование: 30-11-2007 22:36 от Алексей1153++ » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 19-08-2004 12:14 » 

Алик, попробуй SetConsoleOutputCP
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Алик
Постоялец

kz
Offline Offline

« Ответ #3 : 20-08-2004 02:31 » 

Цитата: npak
Алик, попробуй SetConsoleOutputCP

Пробовал - тот же результат.

xAL, да, только конвертировать и остается, я думаю...
Спасибо, что подсказал CharToOem, а то я уже сам чуть не кинулся конвертилку писать!

There is no knowledge where is no power! Улыбаюсь
Записан
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 20-08-2004 04:25 » 

Если писать на MFC/ATL, то у класса CString есть два полезных метода - AnsiToOem() и OemToAnsi(). Делают то, что написал xAL
Записан
EgorovTolik
Новенький

ru
Offline Offline

« Ответ #5 : 10-11-2010 14:39 » 

Для консоли можно сделать так:
#include <iostream>
using namespase std;//Кажется это не обязательно
void main()
{
          setlocale(0, "rus");
          printf("Привет!");
}
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 10-11-2010 14:59 » 

Предполагаю, что следующий содержательный ответ будет не ранее 2016 года Улыбаюсь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Leshii
Новенький

kz
Offline Offline

« Ответ #7 : 18-10-2011 16:11 » 

Все работает
 
setlocale(0, "rus");
cout << "Привет, Мир!!!" << endl;
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 18-10-2011 17:02 » new

Михалыч, угадал
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 18-10-2011 19:49 » 

Жили-были трое троллей
На вершинах дальних гор.
Жили тролли, не скучали
И молчали с давних пор.

Как-то раз, никто не знает,
От каких таких причин
В той стране раздался грохот...
- Что за шум? - спросил один.

Но затих ужасный грохот,
И опять настал покой.
Двести лет прошло в молчанье...
- Это мышь! - сказал другой.

А когда еще столетье
Протекло над краем снов,
Третий тролль сказал: - Прощайте!
Ненавижу болтунов!

(А. Дин)
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #10 : 18-10-2011 19:58 » 

EgorovTolik,
Для консоли можно сделать так:
#include <iostream>
using namespase std;//Кажется это не обязательно
void main()
{
          setlocale(0, "rus");
          printf("Привет!");
}
Вот в таком варианте точно не будет работать. Догадайся с трех раз, почему.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines