将结果从JSON GENERATE转换为EBCDIC

时间:2018-08-16 11:21:36

标签: cobol

对于我的需求之一,我需要COBOL 6中的JSON GENERATE函数。我的问题是,它返回UTF-8,但是我需要EBCDIC(CCSID 1140)中的数据。有办法转换吗?我发现的每个解决方案都使用国家数据类型,但是我必须使用NODBCS编译器选项,因此它们不起作用。

1 个答案:

答案 0 :(得分:2)

我为没有先问一个问题而道歉(但是我对StackOverflow还是陌生的。)问题将是“您是否拥有C ++,并且可以将C ++与您的COBOL链接吗?”我刚刚尝试了这个程序:

#include <iconv.h>

class myConv
   {
   public:
   static myConv globalConv;
   size_t conv(char ** restrict f, unsigned int * restrict flen,
               char ** restrict t, unsigned int * restrict tlen)
      {
      if (ok_)
         {
         return iconv(cd_, f, flen, t, tlen);
         }
      else
         {
         return (size_t)-1;
         }
      }
   private:
   myConv()
      {
      cd_ = iconv_open("1047",      // EBCDID
                       "1208");     // UTF-8
      ok_ = (cd_ != (iconv_t)-1);
      // possibly indicate what the error is
      }
   ~myConv()
      {
      if (ok_)
         {
         if (iconv_close(cd_) != 0)
            {
            // possibly indicate what the error is
            }
         }
      }
   bool ok_;
   iconv_t cd_;
   };

myConv myConv::globalConv;

extern "C" bool CNV(char * f, unsigned int flen,
                    char * t, unsigned int tlen)
   {
   return myConv::globalConv.conv(&f, &flen,
                                  &t, &tlen) != (size_t)-1;
   }

和COBOL调用看起来像这样:

json generate result from grp
call "CNV" using by reference result,
                 by value length of result,
                 by reference convertedres,
                 by value length of convertedres,
                 returning cres

cres是PIC S9(9)COMP数据项,转换成功后将具有非零值。

再次,我很抱歉没有首先询问C ++是否可能。 (或者甚至是C。代码也可以很容易地用C语言完成。)此外,由于JSON GENERATE结果为零填充,结果也不是很完美。