Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Неизвестные символы � при получении XML из двоичных данных версии объекта

Неизвестные символы � при получении XML из двоичных данных версии объекта
Я
   lenkavovka
 
10.06.20 - 06:59
Всем привет!
Задача - получить первый номер документа из истории версий.
Из РегистрСведений.ВерсииОбъектов запросом выбираем нужную версию документа с типом ХранилищеЗначения, далее пытаемся из двоичных данных сделать XML:


        ЧтениеДанных = Новый ЧтениеДанных(Результат[0].ВерсияОбъекта.Получить().Объект);
        СтрокаXML = ЧтениеДанных.ПрочитатьСимволы(,КодировкаТекста.UTF8);

В строке куча "замещающих" символов, примерно так:

�   x�xsi(http://www.w3.org/2001/XMLSchema-instance�<&DocumentObject.ЗаказКлиента{��typeHDocumentObject

При этом кириллический текст читается, то есть кодировка вероятно всё-таки UTF-8. Другие доступные кодировки текст делают нечитаемым. Подскажите, это какая-то очевидная проблема?
   Галахад
 
1 - 10.06.20 - 07:45
Насколько я помню, в версии лежат двоичные данные и сначала их нужно перобразовать.
   lenkavovka
 
2 - 10.06.20 - 08:15
(1) так ведь ЧтениеДанных.ПрочитатьСимволы и преобразовывает двоичные данные. Только криво.
   Галахад
 
3 - 10.06.20 - 08:31
(2) Вообще нет. Этот метод просто читает поток.
   lenkavovka
 
4 - 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(http://www.w3.org/2001/XMLSchema-instance�<&DocumentObject.ЗаказКлиента{��typeHDocumentObject.ЗаказКлиента�<Ref�!e2dcf0bb-9033-11ea-8115-0cc47a14c1ff�<; DeletionMark�false�<Date�2020-05-07T08:50:04�<Number�
ЕЕ00-001157�<Posted��<................

Если не сложно - киньте, пожалуйста, ссылку про преобразование.
   Галахад
 
5 - 10.06.20 - 09:52
ДвоичныеДанные = Результат[0].ВерсияОбъекта.Получить();

ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
   lenkavovka
 
6 - 10.06.20 - 10:47
(5) в момент ДвоичныеДанные.Записать(ИмяВременногоФайла) вылазит ошибка:

Текст XML содержит недопустимый символ в позиции 21

И показывает вот этот фрагмент:

Number�
ЕЕ00-001157�<Posted��

Вероятно, проблема в самих данных. Почему-то там есть символы, которые 1С при таком чтении не понимает. Похоже, придётся лезть в механизм отображения истории версий в конфигурации, смотреть, как там получают данные.
Пока сделали костыль, поиск нужного места с помощью СтрНайти. В общем проблема решена, работает. Но, конечно, вопрос остался незакрытым.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.