Расшифровка XML C # из данных двоичного массива, хранящихся в виде «UCS-2 LE BOM» - PullRequest
0 голосов
/ 10 октября 2019

Я поддерживаю старую систему безопасности c ++ v100. Большая часть XML, хранящаяся в базе данных в виде байтового массива (данных BLOB-объектов), достаточно легко расшифровать с помощью UTF-8. Тем не менее, у нас есть пара мест, где я не смог понять, как расшифровать байтовый массив до чего-нибудь полезного, используя C # 4.7. После вчерашнего изучения данных было установлено, что в данных используется некоторая форма кодирования, называемая «UCS-2 LE BOM».

Я почти должен предположить, что это какая-то форма Unicode ... но яеще предстоит получить этот двоичный массив для расшифровки до чего-либо дешифруемого.

Если у вас есть какой-либо пример кода, который бы читал читаемую строку, это было бы очень полезно.

До сих пор я пробовал все формы кодирования, предлагаемые в C #, но результатывсе загадочные.

XML, хранящийся в каждой записи, выглядит следующим образом:

<COMMAND_BLOCK> 
   <COMMAND Workstation='{Workstation}' Source="ServiceManager" Target="{Unit:|SELECT DISTINCT [Name],[Address] FROM [MasterControllers] WHERE [Address] LIKE '{Workstation}.R%'}" Command="50001"/>
</COMMAND_BLOCK>

В настоящее время я только пытаюсь получить сохраненный байтовый массив в виде строки. Как только это будет строка, я буду в порядке с ней. Я пробовал следующее:

var xml = Encoding.UTF8.GetString(_commandObjectList[i].ImageData);
var xml2 = Encoding.UTF32.GetString(_commandObjectList[i].ImageData);
var xml3 = Encoding.Unicode.GetString(_commandObjectList[i].ImageData);
var xml4 = Encoding.ASCII.GetString(_commandObjectList[i].ImageData);
var xml5 = Encoding.BigEndianUnicode.GetString(_commandObjectList[i].ImageData);
var xml6 = Encoding.Default.GetString(_commandObjectList[i].ImageData);
var xml7 = Encoding.UTF7.GetString(_commandObjectList[i].ImageData);

Returned values

Необработанные данные BLOB-объектов, хранящиеся в Sql Server Table:

Код C ++, которыйкодирует и декодирует XML в / из базы данных, это CFile, расположенный в C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ afx.h '. Код C ++, используемый для кодирования / декодирования:

            CFile fileXML;
            if(fileXML.Open(dlg.m_strFileName, CFile::modeCreate|CFile::modeWrite))
            {
                fileXML.Write(dlg.m_strCommand,dlg.m_strCommand.GetLength());
            fileXML.Close();
            }
...