Как обработать кодировку XML в команде XML GENERATE?

Мы сталкиваемся с проблемой, когда в сообщениях xml со специальными символами, такими как [· (0xB7), Ý (0xDD), ¨(0xA8)], отклоняются, когда они на самом деле являются допустимыми символами XML. Мы обнаружили, что это недопустимые символы для кодировки по умолчанию, которая назначается сообщению, если оно не указано. Этого можно избежать, если мы специально добавим тип кодировки в начало сообщения. Мы использовали кодировку UTF-8. Таким образом, добавляя "" в самом начале сообщения XML, символы должны стать действительными символами. Ниже приведен код кобола:

XML GENERATE RESPONSEDATA FROM ACCT  
    COUNT IN RESPONSEDATALL                  
            WITH ENCODING 1208                      
            WITH XML-DECLARATION                    
END-XML

Но когда мы видим сгенерированный xml, он состоит из символов, как показано ниже:

..Ì_%.ÎÁÊËÑ?>.......Á>Ä?ÀÑ>Å..UTF-8.... 

Ожидаемый вывод - добавленный ниже бит кодирования в заголовок.

<?xml version=“1.0” encoding=“utf-8”?>

Таким образом, проблема заключается в том, что, когда этот сгенерированный XML снова анализируется в другой части кода, он принимает исключение XML и полностью возвращается с сообщением об исключении.

Вопрос в том, есть ли какой-то другой кусочек кода или опций компиляции, которые нужно добавить, чтобы этот xml действовал?

1 ответ

Это совершенно нормально.

Вы кодируете XML как UTF-8, однако вы просматриваете XML на мэйнфрейме (который является EBCDIC). Когда программа просмотра ISPF открывает созданный вами XML-файл, он просто интерпретирует шестнадцатеричные значения и пытается что-то показать вам. Поскольку эти значения не совпадают с набором символов EBCDIC, это выглядит как мусор. Если вы отправите файл по FTP на ваш компьютер, вы увидите, что XML - это действительно тот результат, который вы ищете.

Когда вы анализируете XML, вам действительно нужно сделать что-то похожее и указать кодировку, которая использовалась во время генерации. Приведенный ниже код проанализирует XML-код UTF-8 и, в исключительных случаях, будет отображать весь XML-код вплоть до момента возникновения исключения в EBCDIC, чтобы его можно было прочитать в мейнфрейме SYSOUT.

XML PARSE WS-MY-XML
   ENCODING 1208
   PROCESSING PROCEDURE XXXX-PROCESS-XML
   ON EXCEPTION
      DISPLAY "EXCEPTION OCCURED: "
      DISPLAY FUNCTION DISPLAY-OF (
         FUNCTION NATIONAL-OF (
            XML-TEXT 1208
         )
         1140
      )
END-XML

РЕДАКТИРОВАТЬ: при этом все еще может быть законная ошибка в вашем XML, например, недопустимый символ. Если код, который я выложил, тоже работает, отправьте FTP по XML и запустите его через онлайн-валидатор XML, чтобы выяснить, в чем причина.

Другие вопросы по тегам