Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/76: Рейтинг темы: голосов - 76, средняя оценка - 4.88
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515

Работа с UTF8 в Lazarus 1.6

22.02.2016, 07:17. Показов 16336. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
При загрузке проекта в недавно вышедший Lazarus 1.6 получаю предупреждения, что функции работы с юникодом SysToUTF8 и UTF8ToSys не работают ("deprecated").
При компиляции и запуске проекта получаю ошибку, например, при подключении к базе данных:
Delphi
1
2
3
4
5
6
7
8
9
  curpath:=SysToUTF8(ExtractFilePath(Application.ExeName));
  with DBForm.AccessODBCConnection do
  try
    ...
    Params.Add(UTF8ToSys('DBQ='+curpath+'base\base.mdb'));    
    Connected:=true;
  except
    ...
  end;
Как правильно сейчас работать с utf8? Как я понимаю, есть новый модуль, который требуется подключить lazutf8 и использовать функции оттуда. Но в этом модуле функции имеют то же самое название, например:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function UTF8ToSys(const s: string): string;
begin
  {$IFDEF UTF8_RTL}
  Result:=s;
  {$ELSE}
  if NeedRTLAnsi and (not IsASCII(s)) then
    Result:=UTF8ToAnsi(s)
  else
    Result:=s;
  {$ENDIF}
end;
 
function SysToUTF8(const s: string): string;
begin
  {$IFDEF UTF8_RTL}
  Result:=s;
  {$ELSE}
  if NeedRTLAnsi and (not IsASCII(s)) then
  begin
    Result:=AnsiToUTF8(s);
    {$ifdef FPC_HAS_CPSTRING}
    // prevent UTF8 codepage appear in the strings - we don't need codepage
    // conversion magic in LCL code
    SetCodePage(RawByteString(Result), StringCodePage(s), False);
    {$endif}
  end
  else
    Result:=s;
  {$ENDIF}
end;
Собственно, повторюсь, как теперь нужно работать со строками utf8 в Lazarus?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2016, 07:17
Ответы с готовыми решениями:

Установка ZEOS в Lazarus, работа с PostgressSQL в Lazarus
Не получается никак установить компонент ZEOS в Lazarus открываю пакет с Zeos, нажимаю компилировать, потом установить в течение...

Работа со строками Utf8
Нужно строку в кодировке Utf8 вывести в консоль по 10 символов, в строке могут быть как буквы кириллицы, так и латиницы и знаки...

Правильная работа с utf8 строками
какой самый рассово-верный способ манипулирования строками в utf8. Я пробовал обойтись use utf8; похоже этого не достаточно. В частности,...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,861
Записей в блоге: 12
22.02.2016, 10:10
Цитата Сообщение от WoodHead Посмотреть сообщение
получаю предупреждения, что функции работы с юникодом SysToUTF8 и UTF8ToSys не работают ("deprecated").
Deprecated - это не значит "Не работают", это значит "устарели". Смотри реализацию Utf8ToSys из модуля FileUtil, которая подразумевается, если не подключить LazUTF8:
Pascal
1
2
3
4
function UTF8ToSys(const s: string): string;
begin
  Result := LazUtf8.UTF8ToSys(s);
end;
Вот Лазарус и говорит, что не нужно вызывать лишнюю функцию, просто подключи последним (или, по крайней мере, после FileUtils) модуль LazUTF8, тогда реализация функции будет браться оттуда (старая Паскалевская фича: если есть несколько модулей, в которых определены сущности с одинаковым названием, то эта сущность будет взята из модуля, который подключен последним в списке Uses), и предупреждения исчезнут.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
22.02.2016, 11:00  [ТС]
volvo, в том-то и дело, что модуль LazUTF8 подключил последним. Все компилируется, но работает как-то не так. По крайней мере, получаю предупреждение об ошибке при подключении к БД.
Could not connect with connection string "DRIVER={Microsoft Access Driver (*.mdb)};UID=*myuid*;PWD=*mypass*;UID=*m yuid*;UserCommitSync=Yes;Threads=3;SafeT ransactions=0;PageTimeout=5;MaxScanRows= 8;MaxBufferSize=2048;FIL=MS Access; DriverId=25; DefaultDir=; DBQ=D:\*path*\base\base.mdb;". ODBC error details: LastReturnCode: SQL_ERROR; Record 1: SqlState: HY024; NativeError: -1023; Message: [Microsoft][������� ODBC Microsoft Access] ������ '(��� ������)' ������ ��������� ����. ���������, ��� ���� ����� ��������� � ������� ����������� � �������, �� ������� ��������� �����.;.

Press OK to ignore and risk data corruption.
Press Cancel to kill the program.

[OK] [Cancel]
В Lazarus 1.4.4 все нормально работает.

UPD. Пробелы в цитате запроса добавил, чтобы смайлики не отображались.

Добавлено через 21 минуту
UPD2.
Странно, сохранил строку подключения к БД в файл - всё корректно отображается. Никаких вопросов и кракозябр. Открывал в блокноте.

Добавлено через 5 минут
UPD3.
Поместил БД по адресу, в котором нет кириллицы, подключение произошло успешно. Но в запросах вместо русских букв возвращаются знаки вопросов. Повторюсь, в Lazarus 1.4.4 такого не было.
0
602 / 550 / 210
Регистрация: 24.01.2012
Сообщений: 1,352
22.02.2016, 22:59
Походу эти функции заменили заглушками, которые ничего не делают. http://wiki.freepascal.org/Bet... in_Lazarus
2
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
23.02.2016, 08:05  [ТС]
edukra, кажется, разобрался.
Аналогами функций UTF8ToSys и SysToUTF8 теперь являются UTF8ToWinCP и WinCPToUTF8 соответственно (разумеется, речь о Windows).
Но теперь в Lazarus системная кодировка автоматически меняется на utf8 везде, поэтому в примере выше функция ExtractFilePath возвращает строку в кодировке utf8, а не в системной, как раньше. Следовательно, нужно поменять только кодировку строки подключения к БД на системную.
Правильно будет так:
Delphi
1
2
3
4
5
6
7
8
9
10
  
  curpath:=ExtractFilePath(Application.ExeName); .// убрал SysToUTF8
  with DBForm.AccessODBCConnection do
  try
    ...
    Params.Add(UTF8ToWinCP('DBQ='+curpath+'base\base.mdb')); // заменил UTF8ToSys на UTF8ToWinCP   
    Connected:=true;
  except
    ...
  end;
В uses нужно подключить модуль LazUTF8.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2016, 08:05
Помогаю со студенческими работами здесь

Работа с 1С в Lazarus 1.2.0
Доброе время суток! Пытаюсь подключиться к 1С в Lazarus 1.2.0 c помощью COM. Подключение происходит нормально. Однако при попытке...

Работа с файлами на Lazarus
В файле f записаны целые числа. Написать программу, которая в файл g записывает четные числа, а файл h - нечетные.

Работа с матрицами в lazarus
Заание на фото

Работа со списками Lazarus, Delphi
Список строк заполняется вручную или из текстового файла. После этого разрешается набор букв в поле редактора, причем в него нельзя ввести...

Работа с текстом и файлами в lazarus
Задача заключается в следующем:нужно открыть некий файл в котором есть текс,взять оттуда этот текст и вывести в окно программы,затем данный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru