Перевод проекта на utf8

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

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

Ответить
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Перевод проекта на utf8

Сообщение tria »

Есть большой проект на Лазаре 0.9.24 (cp1251)
Хочу перевести на 1.0.12 (utf8)
В качестве БД используется Firebird (база в кодировке 1251), компоненты доступа - Fibl. Базу надо перевести в utf8, причем сделать это необходимо програмным путем и разослать клиентам программу-перекодировщик.

Просьба. Покидайте в меня ссылками по этому поводу...
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

А что, Firebird этого сам не умеет? СУБД 21 века :shock:
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Из того, что я нашел, Firebird умеет:
- Если поставить в подключении кодировку utf8, то перекодировка происходит на лету. Но как бы неправильно держать БД в одной кодировке, а клиента - в другой.
- Можно выгрузить в transportable, чей-то подшаманить, создать новую БД и загрузить. Для моих клиентов это сферхзадача.
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

разослать клиентам программу-перекодировщик.

Так напиши. Вся программа в ~100 строк уложится.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Проблемы не только в переводе базы в utf8.
Проблемы еще и в коде Lazarus.
Часть логики на char в 1251 (кто ж думал об utf8 10 лет назад), куча настроек в БД в строках в своем формате, уникальных (сделанных) пользователем или для него, которые после тупого конвертирования в utf8 перестанут работать.
Куча кода по обработке строк, где надо или логику менять, или всякие utf8Copy() вставлять, куча кода по вводу-выводу и прочему общению с миром...

Сейчас вот Fibl почему-то вылетает по ошибке, хотя тот же кусок кода во вновь созданном проекте работает нормально...
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Зачем ? Откройте старый проект в новом Lazarus и переставьте модули на UTF8 , затем текст программы переведите в UTF8 , должно сработать, будут мелкие проблемы с обработкой строк. Например Length будет выдавать неправильную длину строки для кириллицы. Поэтому лучше использовать только UTF8 библиотеку. UTF8Length модуль LclProc
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...
Можно и что-то пропустить.
И кстати, что это дает? Это же не перекодировка...
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

tria писал(а):А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...
Можно и что-то пропустить.
И кстати, что это дает? Это же не перекодировка...

Это говорит Лазарусу как работать с модулем , иначе все функции будут неправильно работать, так как не знают в какой кодировке строка.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Понял.
Остался вопрос - "а откуда он знает?"
То бишь, где Лазарь хранит признак, что этот модуль в utf8?
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

tria писал(а):А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...

Меню "Сервис"--"Преобразовать кодировку проектов/пакетов"
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

ssadragon писал(а):Меню "Сервис"--"Преобразовать кодировку проектов/пакетов"


Попробовал. Почему-то подхватил далеко не все файлы проекта...
Ну, вручную я уже вроде как переколбасил. Хотя надо бы какой-то надежный инструмент, чтобы проверить правильность ручной работы...
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

tria писал(а):Почему-то подхватил далеко не все файлы проекта...

Скорее всего он подхватывает те файлы проекта которые видны в Инспекторе проекта
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

ssadragon писал(а):Скорее всего он подхватывает те файлы проекта которые видны в Инспекторе проекта

Неа.
Я потом из инспектора вручную открывал и проверял. Не подхватил где-то 20%
Аватара пользователя
Tango
постоялец
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Сообщение Tango »

А если взять fpc 2.7.1? там вроде правильные функции UTF и Copy, Length, Pos, вроде работают правильно.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Tango писал(а):А если взять fpc 2.7.1? там вроде правильные функции UTF и Copy, Length, Pos, вроде работают правильно.

Да это вообще не важно, мне и текущий вариант подойдет, где надо всегда можно написать UTF8Copy...

Вылезли проблемы.
1. Использую FibL. При выполнении

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

  
  q.SQL.Clear;
  q.SQL.Add('SELECT UserName, CompName FROM CurUsers');
  q.Transaction.StartTransaction;
  q.ExecQuery;

Вылетает в недрах FibL с ошибкой выхода за диапазон. Тот же код, скопированный во вновь созданный проект работает без ошибок.

2. Во вновь созданный проект в инспекторе проекта добавляю Printer4Lazarus. При закрытии проекта он вылетает с ошибкой.

Лазарь 1.0.12
Ответить