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

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

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

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

Сообщение jsa » 30.09.2019 07:22:52

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

Устанавливаю и и деинсталирую запуском в cmd с ключами -i и -u соответсвенно.
Иногда действие не выполняется и выдает ошибку (из-за моего кода) , но текст ошибки не в кодировке консоли, т.е. кракозябрами.
Подскажите пожалуйста, есть ли способ изменить кодировку вывода ошибки при установке службы?
Последний раз редактировалось jsa 30.09.2019 09:38:13, всего редактировалось 1 раз.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение Vadim » 30.09.2019 08:17:20

jsa
Вы программируете службу в Lazarus или мужественно прямо в FPC? :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение jsa » 30.09.2019 09:23:25

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

в Lazarus, руководствуясь примером в указанной статье. (сразу же написал)
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение Vadim » 30.09.2019 10:25:13

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

Что вовсе не означает один-в-один... ;-) Впрочем, неважно, главное Вы сказали. В Lazarus можно исходный код быстро перевести в любую кодировку, на отображение в редакторе это нисколько не повлияет. На рисунке (внизу) первый запуск с исходной кодировкой (UTF-8), второй - с заменённой на CP866.
Несколько кодировок лучше не смешивать в коде, выберите ту что надо, в ней всё и делайте.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение alexs » 30.09.2019 10:37:10

jsa
Вроде в винде сейчас можно задавать кодовую страницу консоли - или я ошибаюсь?
Когда писал статью - просто пользовался FAR-ом - там удобно копировать содержимое консоли - потом вставлял в окно редактора и перекодировал текст.
PS
В какойто момент отказался от винды в качестве платформы для сервисов/серверов. Уж очень много было мелких проблем. Сейчас всё службы перевёл на линукс.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение Vadim » 30.09.2019 10:56:21

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

Можно, но лучше не надо. А то потом забудешь обратно вернуть и все остальные проги будут отрыгивать кракозябры в консоль. :-)
Код: Выделить всё
rem Родная кодировка для виндовой консоли
chcp 866
rem Кодировка UTF-8
chcp 65001
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение jsa » 30.09.2019 12:17:37

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

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

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

Проверил и в Far2 и в Far3 - кракозябры
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение Vadim » 30.09.2019 12:38:12

jsa
Тогда попробуйте временно консоль перевести в UTF-8, может поможет:
Код: Выделить всё
chcp 65001
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение serbod » 30.09.2019 13:28:57

В модуле 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;

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

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

Сообщение Vadim » 30.09.2019 14:00:36

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

Невнимательно читаете... ;-)
jsa написал, что он сам никакие строки в своей программе не выводит, следовательно, к какому месту прикладывать эти функции - непонятно...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение alexs » 30.09.2019 14:23:33

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

В редактор фара выставить кодировку, соответсвующюю кодировке консоло
потом скопировать текст (кракозябры) в редактор из консоли
после этого переключить редактор в кодировку UTF8 - текст отобразится нормально.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение jsa » 30.09.2019 18:11:53

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

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

В общем всем спасибо.
Думал секретная мега фича для такого случая. ну раз нет так нет.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение Vadim » 30.09.2019 20:35:24

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

Тогда придётся перебирать все подряд. Попробуйте:
Код: Выделить всё
chcp 1251
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Ichthyander » 30.09.2019 21:37:15

Код: Выделить всё
{$IFDEF MSWINDOWS}
  SetConsoleOutputCP(CP_UTF8);{$ENDIF}
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru