【发布时间】:2012-06-15 19:09:19
【问题描述】:
我可以在AS400 上将消息从Java 发送到Websphere MQ。如果我从WinXP 发送消息,如果我使用任何可访问的Locale 没有区别,包括完整的语言本地化;英文Locale也没有问题。正确编码的重要之处只有以下代码行:
msgId.characterSet = 1208;
不幸的是,它无效。我想从MQ Queue接收消息的情况有所不同。
-
如果我从 Windows 操作系统收到来自
MQ Queue的消息(没有任何语言包的英语),我可以从MQ Queue以String的形式接收消息。 如果 Windows 操作系统使用某些语言包完全本地化,我会收到异常
来自代码(从 try-catch-finally 块中删除了镇流器)
try {
Class.forName("com.ibm.mq.MQEnvironment");
MQEnvironment.hostname = hostname;
MQEnvironment.port = port1;
MQEnvironment.channel = channel;
MQEnvironment.userID = userID;
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
try {
qmgr1 = new MQQueueManager(qmanager);
MQGetMessageOptions gmo = new MQGetMessageOptions();
int openOptions2 = MQC.MQOO_INPUT_SHARED;
gmo.options = MQC.MQGMO_NO_SYNCPOINT; //Set no sync point
gmo.options = MQC.MQGMO_CONVERT; //Handles ASCII/EBCDIC
gmo.options = MQC.MQGMO_WAIT; //Wait until message arrives
gmo.waitInterval = 3000;
getq = qmgr1.accessQueue(responseQueue, openOptions2);
while (true) {
try {
responseFromQUEUE = "";
MQMessage msgId = new MQMessage();
//putmsg.characterSet = 437;// Set code page to ASCII
//putmsg.characterSet = 1200;// Set code page to UNICODE
msgId.characterSet = 1208;
getq.get(msgId, gmo);
String str = msgId.readLine();
//responseFromQUEUE = CpConv.tf870to1250(msgId.readLine());
//own EncodePage doesn't works too
if (responseFromQUEUE.length() == 0) {
break;
}
} catch (MQException mqx) {
if (mqx.reasonCode == EMPTY_QUEUE) {
} else {
}
}
}
} catch (MQException mqx) {
} finally {
}
} catch (IOException ex) {
} catch (ClassNotFoundException e) {
}
请
是否有一些参数,我想念那里的东西,因为
StringfromMQMessage#readLine()我这里的问题只是关于
String的转换,我对来自
MQMessage#getBytes的Encode没有任何问题
【问题讨论】:
-
任何帮助here?
-
感谢链接,但看起来像 I have this issue,不知道最终用户 PC 怎么可能没有任何问题,另一台得到 UnsupportedEncodingException,现在不知道
-
正如@J-16 SDiZ 所指出的,您正在覆盖您的获取消息选项,因此实际上并未请求转换消息负载。但是,邮件标头始终会被转换,这就是您的错误的来源。该转换基于 QMgr 的 CCSID 设置,而不是 API 调用。 QMgrs CCSID 的设置是什么?
-
@T.Rob 我没有到 AS400 的 RDP :-),无法检查,相当于 Windows cp1250 编码页面 :-)
标签: java windows encode ibm-mq ebcdic