Reg: преобразование данных из EBCDIC в UTF - 8

Я создал XML-данные с помощью функции XML GENERATE, затем я поместил те же данные в WebSphere MQ с помощью программы COBOL - MQPUT Batch.

Из другой пакетной программы COBOL - MQGET я получил данные XML из MQ и попытался вставить те же данные в таблицу pureXML, но столкнулся с кодом ошибки 00002039Q.

Поскольку таблица pureXML поддерживает только формат кодировки UTF-8. Но наши сгенерированные данные XML находятся в формате EBCDIC.

Пожалуйста, помогите мне преобразовать данные EBCDIC / UTF - 16 в данные UTF - 8.

Заранее спасибо.


person Kirthika    schedule 23.09.2015    source источник
comment
www-01.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/   -  person Bill Woodger    schedule 23.09.2015


Ответы (3)


Вы можете использовать опцию получения сообщения MQGMO_CONVERT, чтобы запросить преобразование данных в заданный CCSID при получении из очереди.

Вы можете найти образец здесь: http://www-01.ibm.com/support/knowledgecenter/api/content/nl/en-us/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032130_.htm#q032130___ccode

Или в файле: amqsget0.c в примерах, приложенных к установке MQ.

person Attila Repasi    schedule 23.09.2015
comment
Ссылка предназначена для Linux / Unix / Windows, а не для z / OS, поэтому вы отвечаете на другой вопрос (хотя, возможно, ответ будет таким же или очень похожим, я не знаю). - person Bill Woodger; 23.09.2015
comment
Я бы возражал против CONVERT варианта. Ожидается, что синтаксический анализатор XML декодирует поток символов при условии, что XML правильно закодирован и / или содержит правильную кодировку в преамбуле <?xml. Вот документ IBM о кодировке PureXML www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/ - person Stavr00; 23.09.2015
comment
Вы правы, упомянутые образцы не для мэйнфреймов, однако MQGMO_CONVERT должен быть доступен точно так же. Но я думаю, что указание правильной кодировки в объявлении XML - лучшее решение. Не совсем понимаю, почему вы не отправляете это как ответ Stavr00. - person Attila Repasi; 23.09.2015

Обычно в потоке XML не должно быть явного преобразования. XML-документ может самостоятельно определять свою кодировку. Отправка необработанного XML (без преамбулы) в любой другой кодировке, кроме UTF-8 или UTF-16, не является стандартной. См. Автоопределение кодировок символов для обсуждения кодирования XML.

Вы должны добавить преамбулу к вашим данным XML GENERATE. Найдите кодировку, соответствующую вашей платформе, здесь: http://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.xml/src/tpc/db2z_xmldataencoding.dita

Например. чтобы установить кодировку EBCDIC/Lat1, вы должны добавить

<?xml version="1.0" encoding="IBM1047"?>
person Stavr00    schedule 23.09.2015
comment
Хотя концепция верна, я считаю, что синтаксические анализаторы XML довольно часто испытывают трудности с обработкой чего-либо, кроме кодировки UTF-8 или ISO-8859. Конечно, синтаксические анализаторы IBM z / OS хорошо справляются с этим, поскольку мэйнфрейм по-прежнему в основном EBCDIC, но отправка XML-документа в какую-то произвольную систему с 'encoding = IBM1047', вероятно, будет проблематичной. - person Valerie R; 15.10.2015

Спасибо за ваши ответы.

Я попытался создать XML-документ другим способом, указав преобразование кодовой страницы 1208 с помощью функции С КОДИРОВАНИЕМ 1208, после чего проблема была решена.

С этим форматом кодирования мне удалось успешно вставить свои данные в таблицу pureXML.

person Kirthika    schedule 25.09.2015