Использование fcl-xml с lcl, проблема кодировки

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

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

Ответить
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Использование fcl-xml с lcl, проблема кодировки

Сообщение Odyssey »

Есть следующая проблема: fcl-xml, а именно dom.pp работает с WideString(USC-2/UTF-16), а LCL - с UTF8. В результате приходится заворачивать всю работу с XML в Utf8Encode/Utf8Decode. Хотелось бы этого избежать. В codetools для этой цели сделали свою версию dom.pp (laz_dom.pp) но похоже, что она здорово устарела по сравнению с dom.pp из FPC 2.4.0.

Решал ли кто-нибудь эту проблему? Может быть, возможно небольшим изменением dom.pp добиться прозрачной работы с UTF-8 без постоянной перекодировки?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А поподробнее? Вы не можете работать со значениями узлов или с названиями узлов, которые в UTF-8?
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Нет, я могу работать со всем, чем нужно, но неудобно. Например, вместо

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

Edit1.Text := myElement['name'];
// приходится писать
Edit1.Text := UTF8Encode(myElement['name']);
// и наоборот, вместо
myElement['name'] := Edit1.Text;
// приходится делать так:
myElement['name'] := UTF8Decode(Edit1.Text);

Хотелось бы избавиться от UTF8Encode/UTF8Decode в своём коде модификацией dom.pp. Вот и интересуюсь, не было ли это сделано до меня. Точнее я знаю что было, в codetools, но этот вариант уже устарел. Возможно кто-то делал то же самое с более новой версией dom.pp.

P.S. Имелись в виду, конечно, значения узлов, которые в моём коде в UTF8. Названия узлов у меня в диапазоне ASCII, так что с ними проблем нет.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А, понятно.
Добавьте в строку USES модуль cwstring, тогда будут нормально русские буквы отображаться без перекодировки.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

cwstring - это не то, что нужно, он обеспечивает автоматическое преобразование между ansistring и widestring только под POSIX системами, а мне нужно "автоматизировать" преобразование между utf-8 и widestring под всеми системами, включая Windows.

Насколько я знаю, это можно сделать только модификацией модулей DOM/XMLWrite/XMLRead. Похоже, что никто этого пока никто не делал, значит придётся разобраться самому или пока остаться на SimpleXML.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Odyssey писал(а):включая Windows.

У меня под Windows работает без перекодировки. Я думал у Вас только в unix были проблемы...

Добавлено спустя 1 час 38 минут 29 секунд:
А, нет, извиняюсь. Это у меня в консольном приложении было - читаю значения в UTF-8, а вывод, без всякой перекодировки, идёт в 1251...
------------
Надо, наверное, сделать такой же WideStringManager и так же его подключать при работе с WideString, тем более, что iconv для Windows тоже есть, наверное переделка будет не сильно сложной.
Ответить