Lazarus и отладка русских букв

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

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

Lazarus и отладка русских букв

Сообщение mgear » 25.01.2015 20:13:39

Здравствуйте.

Сразу скажу, что ответ на вопрос искать задолбался, так что в поиск прошу не отправлять, я там и так не первый день сижу без всякой пользы.

Проблема всем известная: надо чтоб и юникод был, т.е. FPC >= 2.7.1, и чтоб лазарь эти переменные отображал нормально. Сейчас у меня строчки отображаются как '#208#239...', причём любого типа, хоть объявленные через тип, хоть присвоенные через SetCodePage, хоть AnsiString, хоть UnicodeString. Читал это и это, но без толку. Исходники из SVN скачал по метке trunk, скомпилировал. Лазарь получился 1.5, а паскаль, якобы, 3.3.1 (думаю, это опечатка, а на самом деле что-то типа 3.1.1). Компилил лазаря и через 2.7.1, и через 2.6.4 - всё едино. И настройки с нуля создавал. Дело происходит под виндой 64. Кодовая страница системная - 1251. Это я показываю, что вопрос не просто с кондачка задаю, а реально сам пытался проблему решать.

Бинарного комплекта lazarus + FPC 2.7.1 найти не смог, может, с ним бы всё заработало "из коробки", поэтому собирал из исходников.

В статье из первой ссылки сказано следующее:
Строки с русскими буквами корректно выводятся на экран, корректно вводятся с клавиатуры, символы их прекрасно индексируются, преобразуются к верхнему и нижнему регистрам соответсвующими функциями. Более того, содержимое переменных UnicodeStrings правильно отображается отладчиком lazarus!

Ну и, в общем, где-то на этом месте у меня затык. Не отображаются переменные, хоть ты тресни.

Помогите, пожалуйста. Подскажите, что именно где надо ткнуть, чтоб переменные отображались по-человечески. Причём они были русские, когда я ставил бинарный дистрибутив lazarus-1.2.6-fpc-2.6.4-win32, но это, конечно, не то. gdb, если что, у меня из этого же дистрибутива, может быть, дело в этом. В общем, уже сил нету бороться. Сейчас единственный вариант - садиться обратно на пиратскую дельфю, там всё работает, но тогда программой нельзя будет делиться. Собственно, старый вариант проги на пиратке и написан. Пользуюсь дома совершенно прекрасно. Но покупать дельфи не хочу, а если не покупать, то меня могут взять за жабры, если прогу (бесплатную, что важно) выложу в общий доступ.

Программа занимается раскладкой фотоснимков. Мне дают список заказов, типа снимков такого-то размера столько-то, такие-то в рамках, такие-то матовые, глянцевые. Я всё это дело пишу в текстовый файл в особом формате. Программа смотрит номера файлов, проверяет ошибки, переименовывает файлы, раскладывает по подкаталогам и считает, сколько жадные печатники в минилабе сдерут с меня денех. Очень клёвая штука, миллион времени и сил экономит, но за время работы с ней накопились пожелания. Сейчас это монстроидальный гибрид из кучи исполняемых файлов PERL+Delphi. Я решил переписать с нуля так, чтобы всё это было в одном экзешнике и лицензионно чистое, и поделиться с общественностью. На сегодняшний день программа находится практически в состоянии хелло ворлд :lol: Но я с вашей помощью, уважаемые коллеги, надеюсь этот хелло победить.
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: Lazarus и отладка русских букв

Сообщение Sharfik » 25.01.2015 20:51:00

Пробовал codetyphon(http://www.pilotlogic.com/sitejoom/) ?
Там как раз в сборке 2.7.1 идет.

ну или поищи поисковиком "Lazarus-1.1-42538-fpc-2.7.1-20130901-win32"

а вообще может в программе ошибка?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Lazarus и отладка русских букв

Сообщение mgear » 25.01.2015 22:50:25

Sharfik писал(а):поищи поисковиком "Lazarus-1.1-42538-fpc-2.7.1-20130901-win32"


Спасибо, с ходу заработало!!!

Ошибка, конечно, не в программе. Довольно трудно сделать ошибку в строчке s := 'русская строка' :)

Остальное позже попробую. Теперь, по крайней мере, можно уже отладчиком пользоваться.

gdb оказались одинаковыми с точностью до байтика, значит, не в них дело. Конфигурация подхватилась и нормально задаунгрейдилась, так что дело и не в ней тоже.
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: Lazarus и отладка русских букв

Сообщение pupsik » 26.01.2015 00:11:25

сделать ошибку в строчке s := 'русская строка'
угу... и почему их делают?

Не отображаются переменные, хоть ты тресни.
если это и есть тот вопрос.... По идее должно быть вроде такого:
Строка русского языка
. А вот пусто... Ну, мне кажется, что-то вы не так делаете (кода нема.... а барабан сломался).

Спасибо, с ходу заработало!!!
не спешите радоваться - 20130901-win32. Т.е. тут вроде то что надо. Но проблемы появятся другого характера. И не вариант что вы "решили" свою проблему переходом на старенький вариант.

п.с.
Только вот статьи вы странновато подобрали. Тифон и лазарь ох какие разные. Они много чего меняют внутри и "это" сильно отличается от лазаря начинки.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Lazarus и отладка русских букв

Сообщение Sharfik » 26.01.2015 00:18:03

mgear писал(а):Ошибка, конечно, не в программе. Довольно трудно сделать ошибку в строчке s := 'русская строка' :)

Запросто. Если входной файл в одной кодировке, скажем Блокнот сохранил не UTF, а ANSII. Или исходник в блокноте правили, то уже константа и текст в ней будет в другой кодеровке. Там в контекстном меню редактора кода есть опция даже, чтобы модулям меня кодировку.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Lazarus и отладка русских букв

Сообщение mgear » 26.01.2015 02:32:29

pupsik писал(а):Но проблемы появятся другого характера

Разумеется, они появились. С кодовыми страницами и перекодировками я борюсь уже X+Y лет и как-то свет в конце туннеля не брезжит и не брезжит. С юникодом, по-моему, гимору только добавилось. По крайней мере, под виндой. Хотя замысел аффтарофф, конечно, был прекрасным.

Прям вот плюнуть на "по-правильному", поставить 2.6.4 и перекодировать ручками, чтоб хотя бы на присвоениях неявным образом не перекодировалось. Дело не в самих моих переменных, как таковых, а в сторонних библиотеках, которые написаны, скажем так, слегка кривовато, либо слегка кривовато работают под FPC. Мне перловые регэкспы нужны просто позарез. Я без них уже не могу - привык за долгие годы. В дельфи они есть в виде очень даже прекрасного модуля TRegEx, который представляет из себя полноценные PCRE, но дельфя стоит денех, а либа под FPC не компилируется. Под FPC есть, как известно, сорокинская либа, и она меня совершенно не устраивает из-за урезанного синтаксиса. Есть TRegExpr, который как бы предок TRegEx и как бы pcre несвежей версии, но это бы ещё не так страшно. Страшно, что объектники борланд сишные, и FPC их не хочет, да и паскаль-интерфейс не компилируется по дефолту. Я пилил-пилил рашпилем, ловил-ловил сегфолты, да и плюнул. Можно, конечно, самому нарисовать обёртку к фирменному pcre, но этого делать сильно не хочется. Теперь подключил BRRE и с затаённым восторгом наблюдаю, как на вход подаёшь UTF8, а на выходе получаешь CP_ACP, то бишь, 1251, а когда на вход подаёшь 1251, то на выходе получаешь вообще чёрт-те что.

Старая версия моей великой и мощной проги написана без всяких юникодов на перле, и там я перекодирую ручками между 866 и 1251. Работает всё совершенно изумительно. Ну и вот как бы я уже морально почти готов к тому, чтобы писать под 2.6.4, потому что сил уже нету бороться не пойми с чем. Пару деньков ещё поковыряю, мож победю перекодировки эти BRRE-шные под 2.7.1. Ну а если нет, то или перепрыгну на 2.6.4 или, может, свою обёртку для pcre напишу. Лет десять назад это уже делал под какую-то совсем уж древнюю версию pcre и дельфи.

Ну или сделать вообще ход конём и на сях написать :)
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: Lazarus и отладка русских букв

Сообщение Максим » 26.01.2015 02:41:19

mgear писал(а):Ну и, в общем, где-то на этом месте у меня затык. Не отображаются переменные, хоть ты тресни.

Помогите, пожалуйста. Подскажите, что именно где надо ткнуть, чтоб переменные отображались по-человечески.

Приведите пример неработающего кода.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Lazarus и отладка русских букв

Сообщение GAMER » 26.01.2015 11:26:17

Хм.. Полез проверять у себя. проблем не вижу.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
Var s: AnsiString;
begin
s:='Проверка';
end; 

Лазарус и FPC - недельной давности с транков.
Винда ХР. Позже проверю на Вин 7.

PS.
Проверил на Вин7/х64 (сборка лазаруса 32 битная). Все нормально.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus и отладка русских букв

Сообщение pupsik » 26.01.2015 11:53:50

ну дык вы анси, а там, вроде, юникод... Вполне возможно - наоборот. Чет я мысль потерял:
надо чтоб и юникод был, т.е. FPC >= 2.7.1
и
как на вход подаёшь UTF8, а на выходе получаешь CP_ACP, то бишь, 1251, а когда на вход подаёшь 1251, то на выходе получаешь вообще чёрт-те что.
дык что, теряюсь я... Хотя, лазарь юзает ютф-8, больше ни-ни....

п.с.
Важно: UTF8ToAnsi возвратит пустую строку, если строка в UTF-8 содержит неверные символы.
чет почитал я сие http://wiki.freepascal.org/LCL_Unicode_Support/ru. А вдруг поэтому и пусто?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Lazarus и отладка русских букв

Сообщение GAMER » 26.01.2015 12:14:24

ТС же писаль, что при анси у него тоже не работает.
хоть AnsiString,
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus и отладка русских букв

Сообщение pupsik » 26.01.2015 15:52:31

вроде юникод... Если судить по первому посту.. Но без кода не понять...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Lazarus и отладка русских букв

Сообщение ZeUsM » 26.01.2015 18:10:44

Попробовал в тупончике, все работает как надо с директивой
Код: Выделить всё
{$codepage UTF8}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ZeUsM
новенький
 
Сообщения: 57
Зарегистрирован: 08.11.2010 13:55:35
Откуда: Нерезиновая

Re: Lazarus и отладка русских букв

Сообщение mgear » 27.01.2015 01:22:25

Голая тестовая прога выдала русские буквы в отладчике лазаруса 1.5 и с паскалем 2.7.1, и с 3.1.1. Я там экспериментировал с выводом текста на консоль, жалко было строчки убивать, поэтому закомментировал.
2015-01-26_232450.jpg


Но тот же самый отладчик выдаёт в моей проге кракозяблы под паскалем 3.1.1. и русские буквы под 2.7.1.
2015-01-26_234315.jpg

2015-01-26_234220.jpg


Получается, надо грешить на uses-ы или, например, декларации типов. Но у меня в тексте про строки ничего такого нету. Из сторонних модулей - BRRE, но я его подключил в ту тестовую прогу, и ни фига не произошло. RegEx - это мой модуль, где только пара обёрточных функций для регэкспов и, опять же, никаких объявлений строковых типов. Я и его подключал к той проге тестовой. Кодировка у всех файлов - 65001. Скриншотиков не привожу, поверьте на слово. Уж кто-кто, а я-то первый заинтересован понять, что происходит ваще. Но не понимаю, в чём разница этих двух программ.

Впрочем, у меня есть ещё одно тупое предположение: в моей проге переменные присваиваются в методах, а в тестовой - вне объектов. Но проверять не хочу. Сил моих уже нету ловить глюки не программы и даже не комилятора, а отладчика.

Короче говоря, ХЗ. Современная наука пока не может такие вещи объяснять. Может быть, наши далёкие потомки смогут лет через пятьсот или, скажем, тысячу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: Lazarus и отладка русских букв

Сообщение pupsik » 27.01.2015 10:29:45

хм... пока только видно что в вашей програме нет тип приложения... APPTYPE console... интересно: если его применить изменения будут?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Lazarus и отладка русских букв

Сообщение zub » 27.01.2015 11:54:43

>>Кодировка у всех файлов - 65001.
Гдето наверно засел файлик с BOMом, в вашей программе, проверте
>>Скриншотиков не привожу, поверьте на слово. Уж кто-кто, а я-то первый заинтересован понять, что происходит ваще
Отладчик тут непричем, как интрепретировать строку от отладчика дело лазаря, а как закодировать строку в бинарнике дело компилятора
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron