Во-первых, przełącznica само по себе недопустимо XML, и поэтому вы получите исключение при попытке вызвать синтаксический анализатор XMLNS C с использованием кода, который вы указали. Вместо этого вам нужно сделать CAST.
Я сгенерировал небольшой тестовый Application / MsgFlow в IIB 10, чтобы проиллюстрировать CASTing BLOB.
Код в ConvertAndParse:
CREATE COMPUTE MODULE ConvertAndParse
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE blobMsg BLOB X'70727A65C582C485637A6E696361';
CREATE LASTCHILD OF OutputLocalEnvironment.Variables.inpMsg DOMAIN 'XMLNSC';
CREATE LASTCHILD OF OutputLocalEnvironment.Variables.inpMsg.XMLNSC NAME 'AsUtf8' VALUE CAST(blobMsg AS CHAR CCSID 1208);
CREATE LASTCHILD OF OutputRoot DOMAIN 'XMLNSC';
CREATE LASTCHILD OF OutputRoot.XMLNSC.EncodingResponse NAME 'AsUtf8InTag' VALUE CAST(blobMsg AS CHAR CCSID 1208);
CREATE LASTCHILD OF OutputRoot.XMLNSC.EncodingResponse NAME CAST(blobMsg AS CHAR CCSID 1208) VALUE 'As a tag name';
RETURN TRUE;
END;
END MODULE;
Когда я запускаю сеанс отладки, значение, помещенное в дерево LocalEnvironment выглядит следующим образом.
И результат вызова потока из браузера.
Теперь давайте разберемся, на какую кодировку мы смотрим. Взглянув на то, что я предполагаю, является входным BLOB, давайте посмотрим, совпадает ли BLOB с UTF-8.
70 72 7A 65 C5 82 C4 85 63 7A 6E 69 63 61
UTF-8 - кодировка символов переменной ширины, которая устанавливает старший порядок бит для указания двух или более байтов. Мы также хотим страницу, которая показывает общие кодовые точки для UTF-8 Полный список символов для UTF-8 . Обратите внимание, что это на самом деле не завершено.
Глядя на первые 4 байта, ни один из них не имеет старшего бита на
70 72 7A 65
И вышеупомянутый список символов говорит, что это prze пока все хорошо.
Затем мы нажимаем C8, у которого включен бит старшего разряда. При небольшом визуальном разборе мы получаем два набора вероятных двухбайтных пар символов
C5 82
C4 85
Обращаясь к списку символов, наши две пары кандидатов фактически соответствуют двум нужным символам и следующие шесть символов, которые не имеют своих старших битов, переводятся в cznica . Выглядит очень хорошо.
Теперь, чтобы исключить другие возможные варианты кодирования.
UTF-16 использует 2 или 4 байта для представления каждого символа в зависимости от Byte Order Mark с prze , закодированным как
UTF-16BE - CP 1200 - 00 70 00 72 00 7A 00 65
UTF-16LE - CP 1202 - 70 00 72 00 7A 00 65 00
Учитывая, что лотов и лотов не много, 00 разумно сделать скидку UTF-16.
ISO-8859-2 - CP 912 - это однобайтовый набор символов, а кодовые точки C5 и C4 не совпадают с двумя желаемыми символами, и поэтому мы можем устранить его.