Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > кодировка "системной" консоли


Автор: kami 13.2.2011, 00:32
Доброго времени суток всем!

Назрел вопрос следующего плана:
программа в ходе работы создает и запускает bat-файл (для обновления, перезагрузки и т.п.). Всё бы хорошо, но как обычно с консолью - проблема с русскими символами в путях к файлам. CharToOEM спасает, но вопрос в другом... 
Возможна ли ситуация, что cmd будет по умолчанию работать в ansi (или какой-либо другой) кодировке? Если да - как это узнать, чтобы определить - пользоваться перекодировкой или нет?
Интересуют системы от Win2k(Pro и Server) до Win2008 Server и Win7.

Заранее спасибо.

Автор: CodeMonkey 13.2.2011, 00:53
SetConsoleOutputCP + SetCurrentConsoleFontEx?

Автор: kami 13.2.2011, 01:27
Цитата(CodeMonkey @  13.2.2011,  00:53 Найти цитируемый пост)
SetConsoleOutputCP + SetCurrentConsoleFontEx?

Возможно, я неправильно написал, что мне нужно... 
Речь не идет о кодировке "console associated with the calling process.", т.е. сделанной (как я понимаю) с помощью AllocConsole, а о 
Код

ShellExecute(... '"c:\...\Рабочий стол\myCreatedFile.bat"', SW_HIDE)
. И вот как раз при создании myCreatedFile.bat, который потом нужно запустить, было бы неплохо узнать - а, собственно, в какой кодировке в него писать? 
Вывод (stdOutput) меня не интересует, просто если записать в .bat команду типа copy "%s" "%s", и в пути к файлу встретятся русские символы не в той кодировке, то cmd.exe говорит "не найден путь к файлу", соответственно - всё обламывается...

P.S. очень не хочется оказаться в роли "мне нужен X, как сделать Y", посему - если не прав, ткните в меня чем-нибудь, например - ссылкой smile В MSDN консольные функции посмотрел, но безрезультатно... все они ориентированы на уже созданную, имеющую соответствующие хендлы консоль, а мне нужно знать (или установить) кодировку в ходе подготовительных мероприятий.

Автор: CodeMonkey 13.2.2011, 16:51
Ну таки cmd/bat файлы надо создавать в OEM кодировке.

По крайней мере так делают все (где под все я понимаю 99% народу)

По той простой причине, что кодировка консоли никак не влияет на внутренности программы. А внутри интерпретатора bat-ком используется OEM.

Ты, конечно, можешь сделать CHCP 1251 первой командой в bat-нике. И это будет работать для команды, скажем, echo "лалала", где "лалала" находится в Win1251.

Но эта же команда испортит вывод от, скажем, той же copy. И никак не исправит параметры к ней.

Автор: kami 13.2.2011, 19:52
Цитата(CodeMonkey @  13.2.2011,  16:51 Найти цитируемый пост)
внутри интерпретатора bat-ком используется OEM.

Именно это и хотел услышать. Только думал "а всегда ли так, или только у меня". 
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)