我可以在Java
上从Websphere MQ
向AS400
发送消息。如果我从WinXP
发送消息,那么如果我使用任何可访问的Locale
,包括完整的语言本地化,则没有区别;英语Locale
也没有问题。正确编码的重要之处仅在于此代码行:
msgId.characterSet = 1208;
幸运的是,它无效。我希望从MQ Queue
获取消息的情况有所不同。
如果我从Windows操作系统MQ Queue
收到消息(英语没有任何语言包),我可以从MQ Queue
String
收到消息形式。
如果Windows操作系统使用某些语言包完全本地化,我收到异常
Exception occured while to message buffer : java.io.UnsupportedEncodingException: Cp870来自代码的
(从try - catch - finally块中删除了balast)
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) {
}
请
是否有一些参数,我错过了String
MQMessage#readLine()
此处的问题仅与String
转化有关,
我与Encode
MQMessage#getBytes
没有任何问题
答案 0 :(得分:2)
CP870是EBCDIC主机代码页。在发生异常时,将Windows更改为哪种语言环境?更改本地后,您仍然使用msgId.characterSet = 1208;
吗?看起来Java库无法将CP870中的传入消息转换为您当前的语言环境。
更改区域设置时检查Windows代码页是什么,并查看120 msgId.characterSet是否正确。
答案 1 :(得分:2)
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
此代码错误,您正在覆盖该选项,您需要|
个。