Перевод проекта на utf8
Модератор: Модераторы
Перевод проекта на utf8
Есть большой проект на Лазаре 0.9.24 (cp1251)
Хочу перевести на 1.0.12 (utf8)
В качестве БД используется Firebird (база в кодировке 1251), компоненты доступа - Fibl. Базу надо перевести в utf8, причем сделать это необходимо програмным путем и разослать клиентам программу-перекодировщик.
Просьба. Покидайте в меня ссылками по этому поводу...
Хочу перевести на 1.0.12 (utf8)
В качестве БД используется Firebird (база в кодировке 1251), компоненты доступа - Fibl. Базу надо перевести в utf8, причем сделать это необходимо програмным путем и разослать клиентам программу-перекодировщик.
Просьба. Покидайте в меня ссылками по этому поводу...
А что, Firebird этого сам не умеет? СУБД 21 века 
Из того, что я нашел, Firebird умеет:
- Если поставить в подключении кодировку utf8, то перекодировка происходит на лету. Но как бы неправильно держать БД в одной кодировке, а клиента - в другой.
- Можно выгрузить в transportable, чей-то подшаманить, создать новую БД и загрузить. Для моих клиентов это сферхзадача.
- Если поставить в подключении кодировку utf8, то перекодировка происходит на лету. Но как бы неправильно держать БД в одной кодировке, а клиента - в другой.
- Можно выгрузить в transportable, чей-то подшаманить, создать новую БД и загрузить. Для моих клиентов это сферхзадача.
разослать клиентам программу-перекодировщик.
Так напиши. Вся программа в ~100 строк уложится.
Проблемы не только в переводе базы в utf8.
Проблемы еще и в коде Lazarus.
Часть логики на char в 1251 (кто ж думал об utf8 10 лет назад), куча настроек в БД в строках в своем формате, уникальных (сделанных) пользователем или для него, которые после тупого конвертирования в utf8 перестанут работать.
Куча кода по обработке строк, где надо или логику менять, или всякие utf8Copy() вставлять, куча кода по вводу-выводу и прочему общению с миром...
Сейчас вот Fibl почему-то вылетает по ошибке, хотя тот же кусок кода во вновь созданном проекте работает нормально...
Проблемы еще и в коде Lazarus.
Часть логики на char в 1251 (кто ж думал об utf8 10 лет назад), куча настроек в БД в строках в своем формате, уникальных (сделанных) пользователем или для него, которые после тупого конвертирования в utf8 перестанут работать.
Куча кода по обработке строк, где надо или логику менять, или всякие utf8Copy() вставлять, куча кода по вводу-выводу и прочему общению с миром...
Сейчас вот Fibl почему-то вылетает по ошибке, хотя тот же кусок кода во вновь созданном проекте работает нормально...
Зачем ? Откройте старый проект в новом Lazarus и переставьте модули на UTF8 , затем текст программы переведите в UTF8 , должно сработать, будут мелкие проблемы с обработкой строк. Например Length будет выдавать неправильную длину строки для кириллицы. Поэтому лучше использовать только UTF8 библиотеку. UTF8Length модуль LclProc
У вас нет необходимых прав для просмотра вложений в этом сообщении.
А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...
Можно и что-то пропустить.
И кстати, что это дает? Это же не перекодировка...
Можно и что-то пропустить.
И кстати, что это дает? Это же не перекодировка...
tria писал(а):А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...
Можно и что-то пропустить.
И кстати, что это дает? Это же не перекодировка...
Это говорит Лазарусу как работать с модулем , иначе все функции будут неправильно работать, так как не знают в какой кодировке строка.
Понял.
Остался вопрос - "а откуда он знает?"
То бишь, где Лазарь хранит признак, что этот модуль в utf8?
Остался вопрос - "а откуда он знает?"
То бишь, где Лазарь хранит признак, что этот модуль в utf8?
tria писал(а):А как бы "переставьте модули на UTF8" сделать для всех модулей сразу? Их штук 50...
Меню "Сервис"--"Преобразовать кодировку проектов/пакетов"
ssadragon писал(а):Меню "Сервис"--"Преобразовать кодировку проектов/пакетов"
Попробовал. Почему-то подхватил далеко не все файлы проекта...
Ну, вручную я уже вроде как переколбасил. Хотя надо бы какой-то надежный инструмент, чтобы проверить правильность ручной работы...
tria писал(а):Почему-то подхватил далеко не все файлы проекта...
Скорее всего он подхватывает те файлы проекта которые видны в Инспекторе проекта
ssadragon писал(а):Скорее всего он подхватывает те файлы проекта которые видны в Инспекторе проекта
Неа.
Я потом из инспектора вручную открывал и проверял. Не подхватил где-то 20%
А если взять fpc 2.7.1? там вроде правильные функции UTF и Copy, Length, Pos, вроде работают правильно.
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
