Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Русский шрифт в командной строке 
:(
    Опции темы
KARDAN
Дата 27.12.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



В Винде в командной строке - не коректно(абра-кадабра) отбражается русский шрифт(записаный в коде).

Использую Microsoft Visual C++ 6.0(SP6). Где в настройках, можна изменить, чтоб русский определял коректно.
За рание блогадарен.

P.S. Я только учюсь, по Шилдту. Первое знакомство с C++.

PM MAIL   Вверх
Chaos A.D.
Дата 27.12.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

Репутация: 6
Всего: 7



Самый легкий вариант - возьми какой-нибудь текстовый редактор (лично я предпочитаю Bred), и переведи в нем твой русский текст в кодировку, в которой сохраняет текст твоя IDE. По-моему, у тебя это win1251. В коде твой текст будет выглядеть абракадаброй, а в консоли - все нормально.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
JoyEx
Дата 27.12.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12





--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
KARDAN
Дата 28.12.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Цитата(Chaos @ 27.12.2005, 18:16)
возьми какой-нибудь текстовый редактор

Хотелось бы чтоб MV C++ всё обрабатывал автоматом. smile
Добавлено @ 10:01
JoyEx
ВЫХОД 3 - был самый заманчевый но всёравно не работает smile


Кто-нибуть знает выход с этой ситуации. smile
PM MAIL   Вверх
chaos
Дата 28.12.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



можно попробовать
команду командного интерпретатора chcp
пример: перевод в 1251 - chcp 1251
PM WWW   Вверх
KARDAN
Дата 28.12.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Забыл написать, на машине установлена Win2k.

На картинке видно ввод команды - и вывод кадабры.

Может ключ в реестре прописать(говорят помагает), что б в DOS-e кодеровку нормальло выводило.



Присоединённый файл ( Кол-во скачиваний: 55 )
Присоединённый файл  CMD.jpg 50,07 Kb
PM MAIL   Вверх
chaos
Дата 28.12.2005, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



запускай так свою программу
chcp 1251 | appname.exe
и все у тебя получиться!!!
Добавлено @ 11:34
или же при каждом выводе придется делать так:
Пример:
Код

char szText[20];
CharToOem("Привет мир!!!", szText);
cout << szText << endl;

PM WWW   Вверх
Exekutor
Дата 28.12.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: 1
Всего: 4



все дело в том что в Windows и в Дос кодировки символов разные. Самый простой и легкий способ - это написать собственную функцию по переводу. Создай строку символов в которой будет содержаться текст, который ты желаешь вывести на экран. Создай функцию, которая будет получать строку и возвращать строку в качестве результата. В функции пропиши кодировки символов в винде и дос. Пусть функция меняет код каждого символа полученой строки (винда) на код символа возвращаемой строки строки (дос). Используй эту функцию во всех приложениях, в которых требуется вывод русского текста на экран консоли.


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
chaos
Дата 28.12.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(Exekutor @ 28.12.2005, 13:48)
все дело в том что в Windows и в Дос кодировки символов разные. Самый простой и легкий способ - это написать собственную функцию по переводу. Создай строку символов в которой будет содержаться текст, который ты желаешь вывести на экран. Создай функцию, которая будет получать строку и возвращать строку в качестве результата. В функции пропиши кодировки символов в винде и дос. Пусть функция меняет код каждого символа полученой строки (винда) на код символа возвращаемой строки строки (дос). Используй эту функцию во всех приложениях, в которых требуется вывод русского текста на экран консоли.

нафиг изобретать велосипед?

когда все уже есть
CharToOem OemToChar
PM WWW   Вверх
Exekutor
Дата 28.12.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: 1
Всего: 4



использование каких-то шаблонов, особенно на этапе обучения, влечет к одному - незнанию, непониманию сути. Гораздо более интерестно и полезно - попробовать решить проблему самому. Конечно, если ты крутой профессионал, ты работаешь и твое время ограничено - изобретать велосипед не самое мудрое решение.


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
KARDAN
Дата 28.12.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Спосибо большое что откликнулись. Попробую все ваши предложеные варианты.

И всётаки по средствам самой Visual Studio в настройках (на подобе Tools->Options->Format->Source Windows->Font) можно ли настроить, или надо использовать дополнительные програмки smile
PM MAIL   Вверх
byNet
Дата 28.12.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 14.11.2005
Где: Беларусь

Репутация: нет
Всего: нет



Как сделать в консоли руский язык в Builder C++ 5
PM MAIL   Вверх
_hunter
Дата 28.12.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



точно так же


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alex007
Дата 29.12.2005, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2005

Репутация: нет
Всего: нет



Цитата
Хотелось бы чтоб MV C++ всё обрабатывал автоматом.

Поставь себе Visual Studio 2005 Pro smile smile smile smile smile smile smile smile smile
PM MAIL   Вверх
KARDAN
Дата 30.12.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Там уже есть эта возможность?
А можно скачать по инету?

PM MAIL   Вверх
Alex007
Дата 30.12.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2005

Репутация: нет
Всего: нет



Цитата
Там уже есть эта возможность?
А можно скачать по инету?

По иннету можно скачать только бесплатную версию - Express Edition(урезаная версия),
но спроси у кого-то может дадут пиратскую Professional smile smile smile smile
PM MAIL   Вверх
GOLD
Дата 30.12.2005, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.12.2005

Репутация: нет
Всего: нет



Не знаю подойдет ли, но для печати по-русски в консольном приложении я написал такую функцию:
Код

void printRus(char str[])  //печать символов в кодировке windows
{
   int i, n=0;
   char *dest;
   while (str[n]!='\0')   //считаем количество символов в переданной строке
       n++;
   dest=(char *)malloc(n*sizeof(char));
   for (i=0; i<=n; i++)
      {
          dest[i]=str[i];
      }
   AnsiToOem(str,dest);
   printf(dest);
   free(dest);
}

а потом
Код

printRus("\nС новым годом!\n");

smile
PM MAIL   Вверх
Void
Дата 31.12.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



GOLD
Оставляя в стороне сам подход к решению: а почему не воспользоваться strlen и strcpy вместо самописных циклов? Они, как правило, очень хорошо оптимизированы на уровне маш. кодов, там далеко не банальный цикл.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Dov
Дата 31.12.2005, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(KARDAN @ 28.12.2005, 10:34)
Забыл написать, на машине установлена Win2k.

Может я чего-то не понял, тогда извинияюсь.
Код
#include <windows.h>
#include <stdio.h>

int main()
{
    SetConsoleOutputCP(1251);
    printf("\nС новым годом!\n");  

    return 0;
}

В окне вывода, в свойствах устанавливаешь шрифт Lucida Console. Всё.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
GOLD
Дата 31.12.2005, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.12.2005

Репутация: нет
Всего: нет



Void Да уж! Я когда сюда вставил код, сам испугался smile
Спасибо за замечание!

Работает даже так:
Код

void printRus(char str[])
{
   AnsiToOem(str,str);
   printf(str);
}

PM MAIL   Вверх
SectoR
Дата 25.2.2006, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



IMHO проще всего так:
Код

#include <stdio.h>
#include <conio.h>

char *rus(char *st)
{
 unsigned char *p=st;
  while(*p)
  {
    if(*p>192)
      if (*p<=239)
        *p-=64;  // А,Б,В ... Я,а,б,в ... п
      else
        *p-=16; // р ... я
    p++;
  }
  return st;
}

int main()
{
 printf("%s",rus("Русский шрифт в консоли!"));
 getch();
}

PM   Вверх
AlexHHL
Дата 2.1.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Приветствую!

Вот вы пишите
printf("%s",rus("Русский шрифт в консоли!"));

и ещё куча примеров как в консольном приложении буквы РФ были видны, так а если в самом редакторе пишется абра-кадабра, я не вижу, что я написал русскими буквами. Настройки облазил с верху до низу!!!
PM MAIL   Вверх
WERITAS
Дата 2.1.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



А я писал для себя вот такую функцию печати русских слов и до сих пор ей пользуюсь:
Код

void RusOut(char *Str)
{
unsigned char c;
for(int i=0;Str[i]!='\0';i++)
  {
  c=Str[i];
  if(c>127)
    {
    if(c<240)c-=64;
    else     c-=16;
    }
  cout<<c;
  }
}


Применение:
Код

RusOut("\nПривет Мир!");



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
jonie
Дата 3.1.2007, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



peshite translitom 8).
Ну или что самое простое и надежное пишите в UNICODE (хотя можно и без него -- смотрите setlocale).
Код

int _tmain(int argc, _TCHAR* argv[])
{
    const wchar_t s[]=L"Привет!";
    setlocale(LC_ALL,"russian_russia.866"); //замена ASCII на юникод в сообщениях
    wcout<<s;
    return 0;
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Kirill89
Дата 3.1.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Я что - то путаю, или можно просто использовать CharToOem?


--------------------
PM MAIL WWW   Вверх
WERITAS
Дата 3.1.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Вот тебе еще такой вариант с использованием MFC'шной строки (разумеется в Project Settings установишь Use MFC in Shared DLL):

Код

CString oem(char* s)
{
  CString str(s);
  str.AnsiToOem();

return str;
}


Применение:
Код

cout<<oem("Привет Мир!")<<endl;



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
DarthGuyver
Дата 15.11.2009, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.11.2009

Репутация: нет
Всего: нет



Вот потратил несколько дней чтоб догнать как русский текст в консоль выводит!!!
Ниодин из способов выше не помог (CharToOem не пробовал)!!!
Видел тут 2 человека выкладывали собственные функции, но у меня они тоже почемуто не попёрли!
Вот написал свою функцию, кто буит пробовать. отпишитесь как она у вас пошла?

Код

#include <stdio.h>

void rus_print (char *s)
{
    char *p = s;

    while (*p)
    {
        if (*p >= 'А' && *p < ('п' + 1))
            printf ("%c", *p - 'А' - 128);
        else if (*p >= 'р' && *p < ('я' + 1))
            printf ("%c", *p - 'А' - 80);
        else
            printf ("%c", *p);
        p++;
    }
}


У меня заработала!!
Теперь буду ей пользоваться!!!

Это сообщение отредактировал(а) DarthGuyver - 15.11.2009, 01:07
PM MAIL   Вверх
sdukshis
Дата 15.11.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



А разве подобное:
Код

#include <stdio.h>
#include <locale.h>

int main(){
    setlocale(LC_ALL, "");

    printf("Привет мир!\n");

    return 0;
}

В Windows не работает?
PM MAIL   Вверх
DarthGuyver
Дата 15.11.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.11.2009

Репутация: нет
Всего: нет



Неа!!!

PM MAIL   Вверх
chaos
Дата 15.11.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



DarthGuyver
Код

system("chcp 1251");

smile

Это сообщение отредактировал(а) chaos - 15.11.2009, 21:47
PM WWW   Вверх
DarthGuyver
Дата 15.11.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.11.2009

Репутация: нет
Всего: нет



Ну мне не помогло!!!
PM MAIL   Вверх
Dronchik
Дата 22.11.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



Лично я использовал всегда CharToOem. Имхо самое удобное для меня. Также естественно можно просто ставить юникод и спокойно писать русскими буквами))Способ в этом посте ихмо самый удобный) 


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1399 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.