Перешёл с 0.9.30на 1.4 - проект не работает. Опять юникод???

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

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

Перешёл с 0.9.30на 1.4 - проект не работает. Опять юникод???

Сообщение postscripter » 02.08.2015 03:26:10

Привет! Был проект под Lazarus 0.9, при переходе на 1.4.2 перестал работать. Пример:


Код: Выделить всё
var folder:string;

folder:=ExtractFilePath(application.ExeName);
try
  if fileexists(folder+'123.txt') then memo1.Lines.LoadFromFile(folder+'123.txt');
except
  Showmessage(SysErrorMessage(GetLastError));
end; 


1) Отладчик показывает, что folder='c:\????????\'.
2) Fileexists выдаёт TRUE.
3) Затем перехватывается исключение "Unable to load file C:\Русский\123.txt". (без try его будет видно)
4) Затем ShowMessage показывает текст ошибки: '???? ?? ???? ??? ? ? ????? [Ok]'

В начале модулей и в опциях сборки обнаружил {$H+}, но он ни на что не влияет. Где ещё ковырять? Повторюсь, этот код работал раньше (правда, насчёт GetLastError не уверен).

NeedRTLAnsi выдаёт True. Замечательно, моя windows не поддерживает юникодные api?
Последний раз редактировалось postscripter 02.08.2015 04:13:04, всего редактировалось 1 раз.
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение Ism » 02.08.2015 04:03:08

FileExists работает в кодировке оси, в Windows это cp1251,
LoadFromFile же скорей всего берет в utf8
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение postscripter » 02.08.2015 04:09:15

Понятно, почему это происходит. Непонятно, что делать, и как оно работало до этого. Что именили в Лазарусе.

Можно конечно пройтись автозаменой FileExists->FileExistsUTF8, но кроме него там тьма других функций, и хз какие из них теперь не работают.
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение Ism » 02.08.2015 04:17:01

Работайте только в utf8 даже если для этого нужно явно преобразовывать
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение postscripter » 02.08.2015 06:06:36

Ism писал(а):Работайте только в utf8 даже если для этого нужно явно преобразовывать


Что для этого нужно менять? Проект большой.

Сейчас происходит следующее:
1) Тип string равносилен ansistring благодаря {H+}.
2) Переменная folder получает ansi-значение, потому что цепочка вызовов extractfilepath(...) в конце обращается к shortstring функции system.ParamStr.
3) Вызов FileExists отрабатывает корректно, потому что ожидает анси-строку и ссылается на неюникодную версию WINAPI без -w. Кстати, почему?
4) Далее. Вызов LoadFromFile в exe-шнике, откомпилированном версией 0.9.30, приводит к созданию объекта типа TFILESTREAM.
4.1) В новой версии Лазаруса создаётся объект TFILESTREAMUTF8, который принимает на вход нашу ansi-строку Folder и обламывается.

Они поменяли внутреннюю логику работы некоторых базовых классов. Где найти список, и что теперь должен поменять я?
Безымянный 1.png

На скриншоте - как работает старая версия.

Добавлено спустя 1 час 11 минут 2 секунды:
Может быть, моя IDE скомпилирована с ключом -dEnableUTF8RTL? Правильно я понимаю, что когда FPC 2.7.1 с поддержкой этого ключа войдёт в состав IDE, проблема разрешится сама собой, и все системные вызовы API будут -w? А до этого момента - костылить с AnsiToUTF8 или отсиживаться на 0.9?

Добавлено спустя 37 минут 38 секунд:
К сожалению. мат на форуме запрещён. Поэтому вот вам картинка.

Изображение

А что бы вы сделали с разработчиками, у которых
TMemo.Lines.SaveToFile() требует юникода, а TStringList.SaveToFile() требует ANSI?

Я начинаю понимать, кажется, за что страдал Лазарь.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение resident » 02.08.2015 11:59:53

postscripter писал(а):при переходе на 1.4.2 перестал работать

Такое и на 1.2.6 не будет работать.

postscripter писал(а):Где ещё ковырять?

Пробовать UTF8ToAnsi и AnsiToUTF8 в каждом неработающем варианте.

postscripter писал(а):А что бы вы сделали с разработчиками

Идёт бракоразводный процесс.
Судья спрашивает бабу: - Почему разводитесь?
- Он меня сексуально не удовлетворяет.
Судья обращается к мужику: - Вы почему не исполняете супружеский долг?
Встаёт, качаясь от голода, худой и бледный муж и дрожащим голосом произносит.
- Граждане судьи налейте мне тарелку супа и я тут весь зал переебу.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение postscripter » 02.08.2015 13:04:47

налейте мне тарелку супа и я тут весь зал

Не знаю как зал, а я с ним реально зае*лся :shock: Это где видано, чтобы два экземпляра одного класса TStringList работали по-разному? Как вообще?? Такое только в DelphiXE стало возможно через класс-хелперы.

Байку возьму на вооружение :wink:
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение hinst » 02.08.2015 23:09:05

достали тупые вопросы про кодировки. всем кто не понимает кодировки и их смысл - идти и учить
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение postscripter » 02.08.2015 23:17:40

достали тупые вопросы про кодировки. всем кто не понимает кодировки и их смысл - идти и учить

Проблема решена, спасибо.
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение slyubez » 03.08.2015 13:10:20

В самом деле, с кодировками в Лазаре тягомотина. Тоже затрахался, разрабатывая и особенно отлаживая код. Есть большой опыт работы в Дельфи, как в старых, так и в новых, Юникоднутых - там никаких проблем не испытывал. Но в Лазаре, когда одним функциям подавай ANSI, другим - UTF8, и не всегда понятно, когда что использовать, просто бардак.
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение qivi » 03.08.2015 13:56:07

>>когда одним функциям подавай ANSI, другим - UTF8
+ на сколько я понял FPC начиная с долгожданного 3.0 будет Unicode (UTF-16), то биш нужно будет балансировать между 3 кодировками )))
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение Лекс Айрин » 03.08.2015 14:39:54

slyubez писал(а):Но в Лазаре, когда одним функциям подавай ANSI, другим - UTF8, и не всегда понятно, когда что использовать, просто бардак


В самой операционке тоже так. Существует, к тому же, дублирование части ANSI и UTF8 функций.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение slyubez » 03.08.2015 16:26:55

В самой операционке тоже так. Существует, к тому же, дублирование части ANSI и UTF8 функций.

Это в Линуксе-то?
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение Ism » 03.08.2015 16:29:13

slyubez писал(а):Тоже затрахался, разрабатывая и особенно отлаживая код. Есть большой опыт работы в Дельфи, как в старых, так и в новых,


Потому, что в Delphi одна кодировка - виндовская
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Перешёл с 0.9.30на 1.4 - проект не работает. Опять юнико

Сообщение postscripter » 03.08.2015 18:45:49

qivi писал(а):на сколько я понял FPC начиная с долгожданного 3.0 будет Unicode (UTF-16)



Так вроде с 2.7.1 уже обещают сделать всё хорошо. Системные вызовы будут unicode, внутренняя кухня (RTL) тоже.
Последний раз редактировалось postscripter 03.08.2015 19:11:31, всего редактировалось 1 раз.
postscripter
новенький
 
Сообщения: 24
Зарегистрирован: 31.05.2012 20:22:01

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru