Служба, кодировка вывода ошибок в консоль

Вопросы программирования и использования среды Lazarus.

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

Ответить
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Служба, кодировка вывода ошибок в консоль

Сообщение jsa »

Разбираюсь с созданием службы для windows
по статье http://www.freepascal.ru/article/lazaru ... 403120204/

Устанавливаю и и деинсталирую запуском в cmd с ключами -i и -u соответсвенно.
Иногда действие не выполняется и выдает ошибку (из-за моего кода) , но текст ошибки не в кодировке консоли, т.е. кракозябрами.
Подскажите пожалуйста, есть ли способ изменить кодировку вывода ошибки при установке службы?
Последний раз редактировалось jsa 30.09.2019 08:38:13, всего редактировалось 1 раз.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

jsa
Вы программируете службу в Lazarus или мужественно прямо в FPC? :-)
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Re: Служба, кодировка вывода ошибок в консоль

Сообщение jsa »

Vadim писал(а):jsa
Вы программируете службу в Lazarus или мужественно прямо в FPC? :-)

в Lazarus, руководствуясь примером в указанной статье. (сразу же написал)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

jsa писал(а):...руководствуясь примером...

Что вовсе не означает один-в-один... ;-) Впрочем, неважно, главное Вы сказали. В Lazarus можно исходный код быстро перевести в любую кодировку, на отображение в редакторе это нисколько не повлияет. На рисунке (внизу) первый запуск с исходной кодировкой (UTF-8), второй - с заменённой на CP866.
Несколько кодировок лучше не смешивать в коде, выберите ту что надо, в ней всё и делайте.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: Служба, кодировка вывода ошибок в консоль

Сообщение alexs »

jsa
Вроде в винде сейчас можно задавать кодовую страницу консоли - или я ошибаюсь?
Когда писал статью - просто пользовался FAR-ом - там удобно копировать содержимое консоли - потом вставлял в окно редактора и перекодировал текст.
PS
В какойто момент отказался от винды в качестве платформы для сервисов/серверов. Уж очень много было мелких проблем. Сейчас всё службы перевёл на линукс.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

alexs писал(а):Вроде в винде сейчас можно задавать кодовую страницу консоли - или я ошибаюсь?

Можно, но лучше не надо. А то потом забудешь обратно вернуть и все остальные проги будут отрыгивать кракозябры в консоль. :-)

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

rem Родная кодировка для виндовой консоли
chcp 866
rem Кодировка UTF-8
chcp 65001
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Re: Служба, кодировка вывода ошибок в консоль

Сообщение jsa »

Vadim писал(а):В Lazarus можно исходный код быстро перевести в любую кодировку, на отображение в редакторе это нисколько не повлияет....

Спасибо. Но тут не та ситуация.
Я в консоль не свои сообщения вывожу. Этих текстов в файле исходника просто нет.
Это так ругается процедура установки и/или деинсталяции службы. Т.е. процедуры из компонент.

Добавлено спустя 3 минуты 40 секунд:
alexs писал(а):Когда писал статью - просто пользовался FAR-ом

Проверил и в Far2 и в Far3 - кракозябры
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

jsa
Тогда попробуйте временно консоль перевести в UTF-8, может поможет:

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

chcp 65001
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Re: Служба, кодировка вывода ошибок в консоль

Сообщение serbod »

В модуле LazUTF8 есть полезные функции:

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

// converts OEM encoded string to UTF8 (used with some Windows specific functions)
function ConsoleToUTF8(const s: string): string;
// converts UTF8 string to console encoding (used by Write, WriteLn)
function UTF8ToConsole(const s: string): string;

// for all Windows supporting 8bit codepages (e.g. not WinCE)
// converts string in Windows code page to UTF8 (used with some Windows specific functions)
function WinCPToUTF8(const s: string): string;
// converts UTF8 string to Windows code page encoding (used by Write, WriteLn)
function UTF8ToWinCP(const s: string): string;

Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

serbod писал(а):В модуле LazUTF8 есть полезные функции:

Невнимательно читаете... ;-)
jsa написал, что он сам никакие строки в своей программе не выводит, следовательно, к какому месту прикладывать эти функции - непонятно...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: Служба, кодировка вывода ошибок в консоль

Сообщение alexs »

jsa писал(а):Проверил и в Far2 и в Far3 - кракозябры

В редактор фара выставить кодировку, соответсвующюю кодировке консоло
потом скопировать текст (кракозябры) в редактор из консоли
после этого переключить редактор в кодировку UTF8 - текст отобразится нормально.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Re: Служба, кодировка вывода ошибок в консоль

Сообщение jsa »

Vadim писал(а):chcp 65001

Кракозябры, но другие.

В общем всем спасибо.
Думал секретная мега фича для такого случая. ну раз нет так нет.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Vadim »

jsa писал(а):Кракозябры, но другие.

Тогда придётся перебирать все подряд. Попробуйте:

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

chcp 1251
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Re: Служба, кодировка вывода ошибок в консоль

Сообщение Ichthyander »

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

{$IFDEF MSWINDOWS}
  SetConsoleOutputCP(CP_UTF8);{$ENDIF}
Ответить