对于我的需求之一,我需要COBOL 6中的JSON GENERATE函数。我的问题是,它返回UTF-8,但是我需要EBCDIC(CCSID 1140)中的数据。有办法转换吗?我发现的每个解决方案都使用国家数据类型,但是我必须使用NODBCS编译器选项,因此它们不起作用。
答案 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结果为零填充,结果也不是很完美。