|
Неизвестные символы � при получении XML из двоичных данных версии объекта
| ☑ |
0
lenkavovka
10.06.20
✎
06:59
|
Всем привет!
Задача - получить первый номер документа из истории версий.
Из РегистрСведений.ВерсииОбъектов запросом выбираем нужную версию документа с типом ХранилищеЗначения, далее пытаемся из двоичных данных сделать XML:
ЧтениеДанных = Новый ЧтениеДанных(Результат[0].ВерсияОбъекта.Получить().Объект);
СтрокаXML = ЧтениеДанных.ПрочитатьСимволы(,КодировкаТекста.UTF8);
В строке куча "замещающих" символов, примерно так:
� x�xsi(
При этом кириллический текст читается, то есть кодировка вероятно всё-таки UTF-8. Другие доступные кодировки текст делают нечитаемым. Подскажите, это какая-то очевидная проблема?
|
|
1
Галахад
гуру
10.06.20
✎
07:45
|
Насколько я помню, в версии лежат двоичные данные и сначала их нужно перобразовать.
|
|
2
lenkavovka
10.06.20
✎
08:15
|
(1) так ведь ЧтениеДанных.ПрочитатьСимволы и преобразовывает двоичные данные. Только криво.
|
|
3
Галахад
гуру
10.06.20
✎
08:31
|
(2) Вообще нет. Этот метод просто читает поток.
|
|
4
lenkavovka
10.06.20
✎
09:12
|
(3) хм.
В Результат[0].ВерсияОбъекта.Получить().Объект значение выглядит как-то так: E0 00 00 01 00 78 CF 02 78 73 69 28 68 74 74 70 3A 2F 2F 77 77 77 2E...
Это ведь двоичные данные, верно?
Далее. Мы создаём новое ЧтениеДанных, куда кладём это значение, и после ЧтениеДанных.ПрочитатьСимволы он в нас выплёвывает кривой XML в виде строки:
� x�xsi(;DeletionMark�false�<Date�2020-05-07T08:50:04�<Number�
ЕЕ00-001157�<Posted��<................
Если не сложно - киньте, пожалуйста, ссылку про преобразование.
|
|
5
Галахад
гуру
10.06.20
✎
09:52
|
ДвоичныеДанные = Результат[0].ВерсияОбъекта.Получить();
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
|
|
6
lenkavovka
10.06.20
✎
10:47
|
(5) в момент ДвоичныеДанные.Записать(ИмяВременногоФайла) вылазит ошибка:
Текст XML содержит недопустимый символ в позиции 21
И показывает вот этот фрагмент:
Number�
ЕЕ00-001157�<Posted��
Вероятно, проблема в самих данных. Почему-то там есть символы, которые 1С при таком чтении не понимает. Похоже, придётся лезть в механизм отображения истории версий в конфигурации, смотреть, как там получают данные.
Пока сделали костыль, поиск нужного места с помощью СтрНайти. В общем проблема решена, работает. Но, конечно, вопрос остался незакрытым.
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший