- Сообщения
- 6
Здравствуйте. Возникла интересная ситуация. Из разряда не что делать, а почему вообще так.
Проблема в следующем:
1. Есть Astra Linux SE 1.7.0.
2. Есть Astra Linux SE 1.7.2. Версия получена путем обновления с 1.7.0. https://wiki.astralinux.ru/pages/viewpage.action?pageId=211652159
Пакеты:
1. Astra Linux SE 1.7.0:
2. Astra Linux SE 1.7.2
Есть xml файл в UTF-8:
Есть упрощенный код:
На разных версиях Astra Linux этот код работает по-разному. Для версии 1.7.0 отрабатывает как ожидается: файл парсится. В версии 1.7.2 ошибка парсинга: error occurred while parsing element.
В ходе экспериментов с исходным xml файлом пришел к выводу, что проблема в трехбайтовой последовательности BOM, которая изначально присутствовала в файле. Без нее на 1.7.2 файл начинает парсится.
Я пробовал разные XML файлы и все сходилось к одному. Если в xml файле отсутствует последовательность BOM, то парсится и на 1.7.0 и на 1.7.2. Если в xml файле присутствует последовательность BOM, то парсится только на 1.7.0.
В связи с этим мне очень стало интересно, почему есть такая разница в поведении на разных версиях ОС? Очевидно, что дело может быть и не в ОС, просто если смотреть на ситуацию упрощенно и очень сверху, то просто был факт обновление ОС с 1.7.0 до 1.7.2. В какую сторону можно копнуть в поисках причин различного поведения?
В версии 1.6.x я с такой проблемой не сталкивался. Да и upstream версии QT XML остались прежними.
Проблема в следующем:
1. Есть Astra Linux SE 1.7.0.
2. Есть Astra Linux SE 1.7.2. Версия получена путем обновления с 1.7.0. https://wiki.astralinux.ru/pages/viewpage.action?pageId=211652159
Пакеты:
1. Astra Linux SE 1.7.0:
Код:
user@astra:~$ dpkg -l | grep libqt5xml
ii libqt5xml5:amd64 5.15.2+dfsg-0astra4 amd64 Qt 5 XML module
ii libqt5xmlpatterns5:amd64 5.15.2-0astra1 amd64 Qt 5 XML patterns module
ii libqt5xmlpatterns5-dev:amd64 5.15.2-0astra1 amd64 Qt 5 XML patterns development files
Код:
user@astra:~$ dpkg -l | grep libqt5xml
ii libqt5xml5:amd64 5.15.2+dfsg-0astra27 amd64 Qt 5 XML module
ii libqt5xmlpatterns5:amd64 5.15.2-0astra1 amd64 Qt 5 XML patterns module
ii libqt5xmlpatterns5-dev:amd64 5.15.2-0astra1 amd64 Qt 5 XML patterns development files
Есть xml файл в UTF-8:
Код:
<?xml version="1.0" encoding="utf-8"?>
<a>
<b>c</b>
</a>
Код:
bool OLoader::loadXml(const QString &filename, QDomDocument &dom)
{
...
QString err;
int line;
int col;
if (!dom.setContent(QByteArray::fromRawData(buffer, int(size)), false, &err, &line, &col)) {
return false;
}
...
return true;
}
В ходе экспериментов с исходным xml файлом пришел к выводу, что проблема в трехбайтовой последовательности BOM, которая изначально присутствовала в файле. Без нее на 1.7.2 файл начинает парсится.
Я пробовал разные XML файлы и все сходилось к одному. Если в xml файле отсутствует последовательность BOM, то парсится и на 1.7.0 и на 1.7.2. Если в xml файле присутствует последовательность BOM, то парсится только на 1.7.0.
В связи с этим мне очень стало интересно, почему есть такая разница в поведении на разных версиях ОС? Очевидно, что дело может быть и не в ОС, просто если смотреть на ситуацию упрощенно и очень сверху, то просто был факт обновление ОС с 1.7.0 до 1.7.2. В какую сторону можно копнуть в поисках причин различного поведения?
В версии 1.6.x я с такой проблемой не сталкивался. Да и upstream версии QT XML остались прежними.