Страница 1 из 1

Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 09 ноя 2010, 00:10
Роман К.
Здравствуйте, уважаемые...

С++ я знаю не намного лучше, чем никак... Изредка пописываю элементарнейшие консольные программки под собственные нужды. Пописываю под Линуксом, но, порой, возникает необходимость и под Винду их пересобрать. Здесь и начинается проблема.

С обеих сторон (как под Кубунтой, так и под XP) - CodeBlocks. Под Линуксом он создаёт файлы в ANSI, а после их сборки под Виндой - получается несовпадение кодировки отправляемого на вывод текста с кодировкой Виндовой консоли. Известная проблема, в общем...

Спасаюсь AkelPad'ом: тупо пересохраняю им .cpp-файл с перекодированием из ANSI в OEM. Однако, собирать его приходится вслепую - в Виндовой консоли крякозябры исчезают, но в редакторе CodeBlocks - появляются. Не умеет она работать с OEM 866 и учиться не собирается - даже плагинов для этого нет. В связи с этим, вопрос:

подскажите, пожалуйста, свободную IDE, умеющую сохранять, читать и редактировать .cpp-файлы в OEM 866.

Покорнейше прошу не предлагать отказаться от русского языка в комментах, а на вывод подавать символы кодами. Варианты с изменением исходников в зависимости от целевой ОСи также считаю для своих задач нецелесообразными. Хочу именно подобрать соответствующую задаче IDE и работать в одной кодировке, не путая себя и других...

Re: Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 09 ноя 2010, 10:32
BBB
А вставить в начале программы вызов:
SetConsoleOutputCP (1251);
не катит?
В этом случае выводимый на консоль текст в ANSI-кодировке будет отображаться нормально.
подскажите, пожалуйста, свободную IDE, умеющую сохранять, читать и редактировать .cpp-файлы в OEM 866.
Собственно, DOS-овский Borland C, например, версии 3.1

Re: Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 09 ноя 2010, 10:57
BBB
Если под Линуксом не определена ф-ия SetConsoleOutputCP, то можно решить проблему "единого исходного текста" с помощью условной помпиляции. Например, в Visual Studio есть предопределенный define WIN32 (т.е. define, автоматически устанавливаемый во всех проектах). Полагаю, под Линуксом он остутствует. В таком случае пишем:

Код: Выделить всё

#if defined (WIN32)
  SetConsoleOutputCP (1251);
#endif

Re: Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 09 ноя 2010, 21:29
Роман К.
Насколько я знаю (прошу, если что, делать скидку на мою малограмотность - я о ней предупреждал), чтобы

Код: Выделить всё

SetConsoleCP(1251);
SetConsoleOutputCP(1251);
заработали, нужно включать

Код: Выделить всё

#include <windows.h>
, а самих их вписывать в самом начале тела функции main().

Как сделать так, чтобы эти строчки (находящиеся в разных местах, что любопытно), под Виндой обрабатывались компилятором, а под Линуксом - пропускались, не вызывая ошибки, я, на нынешней стадии своего знания плюсов, представить себе не могу... А "единый исходный код" для меня важен...

Понимаю, что этот вопрос не вполне вписывается в заданную мною тему, и, по уму, создать бы новую, однако не я от изначальной темы отклонился первым, а теперь уж - чтоб и не распросить...

Re: Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 11 ноя 2010, 09:26
BBB
Роман К. писал(а):...нужно включать

Код: Выделить всё

#include <windows.h>
, а самих их вписывать в самом начале тела функции main().

Как сделать так, чтобы эти строчки (находящиеся в разных местах, что любопытно), под Виндой обрабатывались компилятором, а под Линуксом - пропускались, не вызывая ошибки, я, на нынешней стадии своего знания плюсов, представить себе не могу...
Через ту же условную компиляцию:

Код: Выделить всё

#if defined (WIN32)
  #include <windows.h>
#endif
Только не "в самом начале тела функции main()", а в начале Вашего cpp-файла (ДО ф-ии main).

И Вы бы укзаали, какой компилятор используете в среде Windows, возможно там используется какой-то другой предопределенный define (как я писал, WIN32 я упомянул для компилятора MS Visual Studio)

Re: Пожалуйста, порекомендуйте свободный IDE с поддержкой DOS-кодировок...

Добавлено: 11 ноя 2010, 14:04
Decoder
В принципе любой текстовый редактор для Windows, у которого есть возможность переключения шрифтов, позволяет редактировать текст в кодировке MS-DOS 866. Для этого нужно лишь выбрать шрифт Terminal. Можешь использовать интегрированную среду Eclipse, которая свободно распространяется и поддерживает разные языки программирования.
Но не это главное...
Если ты хочешь создать многоязычное и мультиплатформенное приложение, которое будет работать с разными кодировками текста и на разных операционных системах, то тебе нужно по-другому строить своё приложение.
В этом случае не нужно писать:
cout << "Привет всем!"; или printf("Всем пока");
А нужно для начала создать отдельный файл с текстовыми константами, которые будут определены для каждого конкретного языка или кодовой страницы.
Пусть это будет выглядеть так:
Код cpp:
#ifdef CODEPAGE_1251
#define STR_HELLO "Привет всем"
#define STR_GOODBYE "Всем пока"
#endif

#ifdef CODEPAGE_866
#define STR_HELLO "[Текст в кодировке 866]"
#define STR_GOODBYE "[Текст в кодировке 866]"
#endif




При компиляции тебе надо будет только указать нужное определение для конкретной локализации, например:
#define CODEPAGE_866

А уже в основном коде программы писать
cout << STR_HELLO; или
printf(STR_GOODBYE);

В этом случае у тебя весь код будет един для всех компиляторов и не нужно будет вставлять разные заголовки, типа windows.h