我的系统从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);
提前致谢。
答案 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);
}
}