1 | |
Запуск консольной программы с кодировкой win125123.03.2019, 09:12. Показов 11442. Ответов 13
Метки нет Все метки)
(
Есть исполняемый файл консольной windows программы. В программе есть сообщения кириллицей в кодировке win-1251. При этом программа в процессе работы создает тектовый файл с данными. Для корректного отображения текста как в консоли так и в текстовом файле нужно запустить программу в терминале с предустановленной кодировкой win-1251. Сделать это можно командой chcp 1251.
Задача в том, что бы не нагружать пользователя лишней работой, тем более если он не знает как это сделать. Пусть запускает bat файл который:
Каталог с bat и exe файлами может быть положен пользователем в любую директорию файловой системы windows. Важно, что бы запуск был возможен отовсюду. Просьба написать текст такого bat файла. ps Файл должен получиться короткий, прошу помочь, у меня винды нет, пользователь другой ОС.
0
|
|
23.03.2019, 09:12 | |
Ответы с готовыми решениями:
13
Автоматизация консольной программы
Запуск и получение данных из консольной программы *.exe Запуск консольной программы из программы |
10574 / 5538 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
|
|
23.03.2019, 10:28 | 2 |
1)
mode con /? 2) chcp /? 3) cd /? cmd /? 4) exit 0
1
|
10574 / 5538 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
|
||||||
23.03.2019, 19:33 | 4 | |||||
![]() Решение
Отчасти да, отчасти нет.
2) если programma.exe после запуска сразу возвращает управление в консоль, то запускать придётся по-другом.
2
|
24.03.2019, 04:25 [ТС] | 5 |
programma.exe может быть скомпилирована c любой кодировкой, но суть именно в том, что бы корректно отображалась кириллица как в терминале, так и в создаваемом этой программой текстовом файле, поэтому нужна кодировка win-1251.
Другой путь, без bat файла, можно скомпилировать программу с кодировкой CP866. В этом случае вывод данных в консоль будет производится корректно, но для корректности вывода сообщений в текстовый файл в программу придется встраивать модуль перекодирования 866-1251, это сделать можно, но больше возни и меньше универсальности. Хотя не исключено, что попробую оба метода. Нет, предполагается работа именно в программе. Возврат управления в консоль происходит после завершения работы программы, после чего консоль может быть закрыта. Вся суть в открытии консоли с нужной кодировкой для корректной работы программы.
0
|
4332 / 2122 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|
24.03.2019, 21:37 | 6 |
разве не ОС создает файл (ну да, по пинку из программы) в той кодировке, в которой ей гласит приложение отвечающее за создание и чтение этих файлов, notepad.exe - штатный блокнот windows по умолчанию и в кодировке 1251. Например у меня стоит его замена на AkelPad и по умолчанию файлы txt создаются и открываются в кодировке 866, так что проблем с кириллицей практически никогда нет.
Добавлено через 3 минуты а вообще, раз уж просите помощи, можно бы и
0
|
26.03.2019, 14:17 [ТС] | 7 |
Это программа не только для меня, если я напишу, что для ее запуска и корректного чтения созданных ею файлов нужно поставить еще какую то стороннюю программу, то отношение к идее будет отрицательным. Для чтения файлов нужно использовать только штатный блокнот.
Это специализированный математический расчет из области электротехники. Вряд ли это кому то интересно и важно в контексте данной темы. === Работу bat файла и первого прообраза программы попробовал на винде. Возник вопрос. 1. Запуском bat файла запускается консоль 2. Меняется кодировка на win-1251 (проверил это подстановкой в bat файл команд chcp и pause перед запуском файла programma.exe) 3. Программа запускается с корректным отображением кириллицы Кодовая страница консоли по умолчанию 866, то же проверено (это видно во время паузы, по команде chcp пишется что то вида: "╪шЁюър¤ых 1251" вместо "кодовая страница 1251"). Фокус в том, что программа скомпилирована с кодировкой CP866 для тестирования с непосредственным запуском, без bat-файла. Т.е. в первом варианте я непосредственно мышью запускаю programma.exe и вижу корректное отображение. Во втором варианте я запускаю ее же через bat файл со сменой кодировки в 1251 и то же вижу корректное отображение кириллицы. В чем подвох? ps вывод в файл на винде еще не проверен, эта возможность есть только в следующей версии программы, пока существующей только в linux версии.
0
|
506 / 178 / 27
Регистрация: 11.03.2018
Сообщений: 763
|
||||||
26.03.2019, 16:08 | 8 | |||||
Версия Windows ?
В принципе, если приложение знает про себя, что живёт оно в кодировке cp866, то вполне вероятно использование внутри системного вызова
проверить это предположение можно после завершения работы приложения командой chcp, которая покажет текущую кодировку. Добавлено через 12 минут Второе, что можно сказать,- я неоднократно видел приложения, которые отличаются корректным выводом кириллицы в консоль вне зависимости от режима кодирования последней. Что позволяет сделать предположение о наличии соответствующего Виндовс API по определению кодировки родительской консоли и использованию этого API для подстройки I/O своего приложения. Добавлено через 18 минут GetConsoleOutputCP function
0
|
30.03.2019, 04:43 [ТС] | 9 |
Пробовал в windows 7.
Win-api или системного вызова system("chcp 866") в программе не применялось. Программа написана для 2-х систем, причем разработка велась в linux, сейчас производится ее отладка. Единственное различие вежду версиями для windows и linux в системном вызове очистки экрана терминала, в linux call system (clear), в windows call system (‘cls’), других различий нет, если не встраивать модуль прекодирования 866-1251 для вывода в файл, но и он сделан средствами самого языка без особенностей применения в разных ОС и пока он не встроен. Сделал вставкой команд chcp и pause после завершения работы программы. Кодовая страница 1251. Видиом что-то упускаю, буду разбираться дальше.
0
|
506 / 178 / 27
Регистрация: 11.03.2018
Сообщений: 763
|
|
30.03.2019, 08:50 | 10 |
После вышесказанного остаётся только предположить существование высокоинтеллектуального
библиотечного модуля ввода-вывода, которым втихую пользуется компилятор gcc для Windows * Это легко проверить. Собрать приложение из одной строЧки вывода кириллицей, сохранить в двух кодировках, затем собрать и посмотреть на результат. (*) какая, кстати, используется подсистема mingw или cygwin ?
0
|
30.03.2019, 10:14 [ТС] | 11 |
Код
system("chcp 866"); Дома только линь, поэтому не могу проверить, к сожалению, по крайнй мере пока. Компилятор ifort (не на моей машине), но возможно буду компилировать в одном из того что вы написали, тем более вероятно приедтся ставить виртуалку для еще одной задачи.
0
|
506 / 178 / 27
Регистрация: 11.03.2018
Сообщений: 763
|
|
30.03.2019, 11:14 | 12 |
Ну а, собственно, зачем тратить время своей жизни на анализ того, почему программа работает правильно ? )
Добавлено через 9 минут Как я понял, исходник для компиляции ifort должен быть в кодировке 1251 и должен получиться правильный вывод в 'консоль' кириллицы вне зависимости от того в какую кодировку имеет 'консоль'. Если это так и есть, надо поблагодарить кого-нибудь, всё забыть и предаться жизненым удовольствиям.
0
|
30.03.2019, 12:23 [ТС] | 13 |
Люблю во всем разобраться
![]() Всем спасибо!
0
|
23.11.2020, 16:05 [ТС] | 14 |
Решил старую проблему, пришлось опять столкнуться с этой задачей но на другой программе. Оказывается решалось все очень просто и решение лежало на поверхности. Просто делаем отдельный модуль вывода данных в файл и компилируем его в кодировке win-1251, все остальное компилируем в другой нужной кодировке, в данном случае в ср-866. Далее линкуем объектные файлы и получаем нужный результат.
1
|
23.11.2020, 16:05 | |
Помогаю со студенческими работами здесь
14
С кодировкой базы данных и кодировкой сайтом и кодировкой файла разобраться не могу
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |