Помогите пожалуйста с запсью/чтеньем XML!!!!

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

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

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 23.07.2012 13:07:15

Столкнулся с неприятным обстоятельством...
Программу пишу под Linux, решил откомпилировать под Win XP, строковые данные считанные из XML и представленные в визуальных контролах (списки, боксы, мемо) - отображаются вопросиками. Читал что реализация XML в Lazarus работает по умолчанию с UTF8, поэтому сюрприз был довольно неожиданным.
Это можно как то поправить?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Mr.Smart » 23.07.2012 14:45:38

XML файлы по умолчанию имею кодировку UTF-8, а стандартные средства по работе с DOM деревом имеют кодировку строковых методов WideString/UnicodeString.
При присваивании к переменной типа AnsiString/String происходит неявное преобразование в кодировку локали, а т.к. локаль в Винде cp1251 отсюда вывод.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Vadim » 24.07.2012 08:31:01

qivi
Сначала посмотрите в какой кодировке у Вас сами XML-файлы.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 24.07.2012 17:26:48

Vadim писал(а):qivi
Сначала посмотрите в какой кодировке у Вас сами XML-файлы.


XML в UTF8 без сомнений. Видимо всё как говорит Mr.Smart. Я забил, мне не особо нужна виндовс версия.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Vadim » 24.07.2012 17:33:07

qivi писал(а):XML в UTF8 без сомнений.

Отсутствие сомнений должно быть подтверждено доказательством. ;) Но раз Вам уже всё по барабану, тогда действительно, забить - самое правильное решение. :D
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 25.07.2012 16:31:31

Отсутствие сомнений должно быть подтверждено доказательством. ;)

Было проверенно.
Но раз Вам уже всё по барабану, тогда действительно, забить - самое правильное решение. :D

Ради работы под виндовс вставлять костыли перекодировки строк?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Mr.Smart » 25.07.2012 16:35:43

qivi писал(а):Ради работы под виндовс вставлять костыли перекодировки строк?

Это не костыли, а нормальное преобразование из WideString в UTF8String;
Код: Выделить всё
UTF8Encode


Добавлено спустя 44 секунды:
А, допустим, если в Линупсе локаль будет отличаться от UTF8?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Vadim » 26.07.2012 09:17:43

Mr.Smart писал(а):А, допустим, если в Линупсе локаль будет отличаться от UTF8?

Например, во FreeBSD, установленной по умолчанию, она как раз категорически отличается... ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 17.01.2013 17:10:50

Сегодня вновь попробовал компилировать проект под виндовс, UTF8Encode пробовал использовать и при записи и при чтении XML файлов. Те файлы что были записанны ещё в линукс корректно читаются при использовании UTF8Encode, но вот при записи с использованием UTF8Encode в файл записывается нечто вовсе не utf8, если не использовать при записи UTF8Encode то же кракозябрики которые обратно не читаются.

при этом нужно отметить что все строковые переменные в проекте типа utf8string.

Как гарантировать запись русскоязычного текста в XML файл в кодировке UTF8 не зависимо от системной кодировки или других факторов?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение SSerge » 17.01.2013 18:45:31

qivi писал(а):при этом нужно отметить что все строковые переменные в проекте типа utf8string.


По этому поводу _внимательно_ читаем это: http://sirserge.altai.info/articles/?id=45
и долго размышляем

qivi писал(а):Как гарантировать запись русскоязычного текста в XML файл в кодировке UTF8 не зависимо от системной кодировки или других факторов?


С учетом сказанного выше - окончательный результат присвоить переменной типа RawByteString и снять кодовую страницу со строки
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 17.01.2013 18:55:48

Ещё маленькая оговорочка я пользуюсь релизными версиями Lazarus и FPC так что у меня ещё FPC 2.6.0
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение SSerge » 17.01.2013 18:58:55

qivi писал(а):Ещё маленькая оговорочка я пользуюсь релизными версиями Lazarus и FPC так что у меня ещё FPC 2.6.0

Увы, тогда пардон...
Однако, если для валидной строки UTF в процессе записи в файл все таки проскакивает какое-то преобразование, то для 2.6.0 еще есть возможность отмапить её на байтовый массив, а сам массив уже отписывать через BlockWrite
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 18.01.2013 00:43:39

У меня много данных хранится в XML, и я недавно узнал о нововведениях грядущей версии FPC... не обернётся ли это для меня тем что я не смогу контролировать формат записи строк при использовании DOMXML и мне придётся искать ему замену и переделывать всю программу? Есть ли какой то способ контролировать запись строк в XML?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение qivi » 25.01.2013 11:14:38

Люди, помогите пожалуйста разобраться с платформенной независимостью формата (кодировкой) записи строк в XML.

Прилагаемый файл демка записывает строки из мемо в XML файл и читает их обратно. Тестовая платформа WinXP, Lazarus 1.0.2, FPC 2.6.0.
Запись в Linux даёт кодировку UTF8, для проверки использую LibreOffice открывая XML файл как кодированный текст и выбирая кодировку UTF8. Точно так же тестирую и файл записанный в WinXP, но в Win он открывается не корректно - кроказябрики. При этом под WinXP он пишет не в ANSI кодировке, что становиться очевидно если открыть файл блокнотом - крокозябрики, однако какая бы там не была кодировка, сама демка (записавшая этот файл) корректно открывает его под WinXP. Файлы записанные демкой под Linux (как показывает проверка LibreOffice действительно UTF8), не открываются корректно этой демкой в Win, и наоборот записанные в Win (в неопределённой мною кодировке) не открываются в Linux.

Моя программа хранит массу данных в XML, для меня критически важно гарантировать запись в определённой кодировке, подскажите как этого добиться?

XML_TEST.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с запсью/чтеньем XML!!!!

Сообщение Mr.Smart » 25.01.2013 11:19:07

Код: Выделить всё
    Dannie:=F_XML.CreateTextNode(UTF8Decode(Memo1.Lines[n]));
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron