Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.