ошибка вывода writeln

Общие вопросы программирования, алгоритмы и т.п.

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

Re: ошибка вывода writeln

Сообщение zub » 27.02.2022 02:39:50

{$CODEPAGE CP866}
ты вкурсе что эта директива значит? или для острастки?
>>//точно не вспомню, что тут лишнее :)
тут всё лищнее, как и setconsolecp ниже

У ТС проблемы не с кодировкой, но твой ответ добавит еще и их))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: ошибка вывода writeln

Сообщение Сквозняк » 28.02.2022 15:10:56

zub писал(а):{$CODEPAGE CP866}
ты вкурсе что эта директива значит? или для острастки?

В курсе. Она помогает программам использующим эту кодировку работать как раньше, надо только заменить типы строк на rawbytestring везде где это возможно.
zub писал(а):тут всё лищнее, как и setconsolecp ниже


Этот набор "заклинаний" появился не просто так, а как ответ на глюки семёрки и десятки. Запускаешь программу в "русской" винде и получаешь звиздец, потому что в путях оказываются не английские символы, а винда команды их сождержащие перекодирует! С кракозябрами в консоли ещё можно смириться, а с полной неработоспособностью программы - уже нет. И вот этот код решает эти проблемы. Причём, если к программе пристёгнут блок кода закоденный в лазарусе, то
Код: Выделить всё
RUNCOMMAND('cmd.exe /c chcp 866',ZZ5); //контрольный "выстрел, чтобы накормить маздайку кодировкой"
setconsolecp(866);

нужно перед вводом системных команд или открытием файлов делать каждый раз после перерыва, потому что неизвестно, поменяла другая часть кода системные настройки или нет.
zub писал(а):У ТС проблемы не с кодировкой, но твой ответ добавит еще и их))

Мой ответ помогает решать виндопроблемы в приложениях использующих консоль и написанных не в лазарусе. В чём там у ТС проблема, точно не выяснили, но очевидно, что винда при любой возможности будет пытаться перекодировать его текст и как воспримет '!' - вопрос конечно интересный и неоднозначный, возможно, как управляющий код, лотерея это. А в хорошо написанной программе такие лотереи нужно исключить.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: ошибка вывода writeln

Сообщение zub » 28.02.2022 15:45:42

$CODEPAGE
емнип указывает в какой кодировке сохранены исходники $CODEPAGE CP866 - т.е. ты должен сохранить исходники в 866
компилятор при компиляции все что между кавычек в строковых константах перекодирует cp866->utf8 и если исходник не сохранен в 866 то уже на этом шаге ты получишь неисправимый мусор в строках
Т.е. призывая юзать CODEPAGE нужно обязательно указывать в какой кодировке сохранять исходники

>>Этот набор "заклинаний" появился не просто так, а как ответ на глюки семёрки и десятки
это были не глюки 7-10, это были недоделки fpc, сейчас уже все гораздо лучше, можно без заклинаний
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: ошибка вывода writeln

Сообщение Сквозняк » 28.02.2022 16:25:18

zub писал(а):$CODEPAGE
емнип указывает в какой кодировке сохранены исходники $CODEPAGE CP866 - т.е. ты должен сохранить исходники в 866
компилятор при компиляции все что между кавычек в строковых константах перекодирует cp866->utf8 и если исходник не сохранен в 866 то уже на этом шаге ты получишь неисправимый мусор в строках

Если исходник использует другую восьмибитную кодировку, то на этом шаге большую часть проблем всё равно удастся проскочить, потому, что как байт из восьмибитной кодировки не перекодируй в utf8 а потом обратно в ту же кодировку, то он в итоге должен превратиться в себя прежнего. А другая русская восьмибитная кодировка в тексте программы не очень и нужна по ряду причин. Для винды есть сборка текстового редактора kate, в котором можно переключать кодировки. Он конечно не такой же удобный как kwrite, но в винде выбора нет, там нужно страдать.

zub писал(а):это были не глюки 7-10, это были недоделки fpc, сейчас уже все гораздо лучше, можно без заклинаний


Винда не перекодирует команды? Пока не протестировал, нельзя знать про работоспособность без заклинаний наверняка. В любом случае, они работу программы не портят. Если версия кодировок синхронизируется ещё раз, то хуже быть не должно, если в fpc с ними не напортачили. И есть такая вещь как зависимости. Нельзя просто так взять и прыгнуть на другую версию fpc не проведя кучи вспомогательных работ. Если где-то используется лазарус, то при смене версии fpc нужно сменить и его. А если при этом применяется линукс, который не поддерживает новые сборки лазаруса с другим типом исполняемых файлов, то нужно пересобрать и его, а потом протестировать что там теперь с багом печатания лишнего символа в окне редактора, исправили его или нужно заниматься этим самому.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Пред.

Вернуться в Общее

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

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

Рейтинг@Mail.ru