Cobol 将JSON生成的结果转换为EBCDIC

Cobol 将JSON生成的结果转换为EBCDIC,cobol,Cobol,对于我的一个需求,我需要COBOL6中的JSON生成函数。我的问题是,它返回UTF-8,但我需要EBCDIC(CCSID 1140)中的数据。有没有办法转换这个?我发现的每个解决方案都使用了国家数据类型,但是我必须使用NoBbCS编译器选项,所以这些都不起作用。 < P>我很抱歉没有首先问问题(但是我太新了,不能让StAcExver允许。)问题是“你有C++,你能把C++与COBOL链接吗?”我刚尝试过这个程序: #include <iconv.h> class myConv

对于我的一个需求,我需要COBOL6中的JSON生成函数。我的问题是,它返回UTF-8,但我需要EBCDIC(CCSID 1140)中的数据。有没有办法转换这个?我发现的每个解决方案都使用了国家数据类型,但是我必须使用NoBbCS编译器选项,所以这些都不起作用。

< P>我很抱歉没有首先问问题(但是我太新了,不能让StAcExver允许。)问题是“你有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;
   }
cres是PIC S9(9)COMP数据项,其将具有转换成功的非零值


再次,我对第一次询问C++是否有可能表示歉意。(或者C。代码可以在C中容易地完成),而且结果是不完全的,因为JSON生成结果是零填充。

< P>我很抱歉没有首先问问题(但是我太新了,以至于StAcExtPoad允许这样)。问题是“你有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;
   }
cres是PIC S9(9)COMP数据项,其将具有转换成功的非零值


再次,我对第一次询问C++是否有可能表示歉意。(甚至C。代码可以用C轻松完成。)此外,由于JSON生成结果是零填充的,因此结果不是很完美。

如果您想用COBOL完成,您需要使用DBCS编译器。请问您为什么想要EBCDIC JSON?JSON标准规定JSON将用UTF-8表示,在EBCDIC中使用JSON可能不是一个好主意。还有,为什么不能使用NODBCS呢?是否安装了C++编译器?@ JNEntrutruDAU,JSON发送到使用EBCDIC,也是我想替换的第三方程序在EBCDIC中创建它。@ RalZAREK,即使数据库本身是EBCDIC,您仍然可以将字段设置为二进制数据,只存储UTF-8。通过使JSON成为EBCDIC,在您将其转换回之前,您实际上使其无法读取任何读取JSON的内容。如果您想在COBOL中执行此操作,您需要使用DBCS编译器。请问您为什么希望使用EBCDIC JSON?JSON标准规定JSON将用UTF-8表示,在EBCDIC中使用JSON可能不是一个好主意。还有,为什么不能使用NODBCS呢?是否安装了C++编译器?@ JNEntrutruDAU,JSON发送到使用EBCDIC,也是我想替换的第三方程序在EBCDIC中创建它。@ RalZAREK,即使数据库本身是EBCDIC,您仍然可以将字段设置为二进制数据,只存储UTF-8。通过使JSON成为EBCDIC,在将其转换回之前,本质上就是使其无法读取任何读取JSON的内容。