数据转换和编码CP037

时间:2013-04-03 02:26:29

标签: events encoding ibm-mq mainframe

我的系统从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);

提前致谢。

2 个答案:

答案 0 :(得分: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调用

MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT;
MQMessage receiveMsg = new MQMessage();
inQ.get(receiveMsg, gmo);

答案 1 :(得分: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);
    }
}