0

我的系统读取Websphere MQ来自Mainframe队列的数据,应用程序读取的数据是 EBCDIC 格式 -

它早些时候工作正常,我们今年早些时候搬到了 jdk1.6(不确定这是否会导致这个问题)。

我得到一个变量值为 40,其中 EBCDIC 表示“”,但这并没有得到隐蔽。

那么问题是 MQ 还是 Mainframe 应该负责这种转换?因为我们正在进行以下转换,但这不起作用 -

                        UnicodeFormat = "CP037";
                        byte[] b;
                        b = UninterpretedRowdata.getBytes("Cp037");
                        //System.out.println("DEST CP : "+UnicodeFormat);
                        UnicodedRow = new String(b, UnicodeFormat);

提前致谢。

4

2 回答 2

2

我不知道为什么你会想要自己进行转换。诡异的。MQ 为您进行转换要好得多。即RTM http://publib.boulder.ibm.com/infocenter/wmqv7/v7r1/topic/com.ibm.mq.doc/zd00050_.htm

MQ 进行转换需要两件事:

1)消息需要将MD.Format字段设置为MQC.MQFMT_STRING

2) 您使用 convert 发出 MQGet API 调用

IE

MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT;
MQMessage receiveMsg = new MQMessage();
inQ.get(receiveMsg, gmo);
于 2013-04-03T14:12:00.297 回答
0

我编写了以下转换编码的代码:

public class Converter{

    public static void main(String[] args) {

        Charset charsetEBCDIC = Charset.forName("CP037");
        Charset charsetACSII = Charset.forName("US-ASCII");

        String ebcdic = "(((((((";
        System.out.println("String EBCDIC: " + ebcdic);
        System.out.println("String converted to ASCII: " + convertTO(ebcdic, charsetEBCDIC, charsetACSII));

        String ascII = "MMMMMM";
        System.out.println("String ASCII: " + ascII);
        System.out.println("String converted to EBCDIC: " + convertTO(ascII, charsetACSII, charsetEBCDIC));
    }

    public static String convertTO(String dados, Charset encondingFrom, Charset encondingTo) {
        return new String(dados.getBytes(encondingFrom), encondingTo);
    }
}
于 2017-02-02T17:06:21.617 回答