从字节流消息中读取消息,转成字符类型出现中文乱码,实际上是由于put到MQ中的字符编码与接收的字符编码转化不一致导致的,从日志信息可以看出,MQ中的这一条消息是有对应的Character。所以解决办法就是从message中获取字符编码,对应的代码:message.getStringProperty(WMQConstants.JMS_IBM_CHARACTER_SET)
然后拿对应的Character再转成字符串。
code:
String responseXml = null;
if (message instanceof BytesMessage) {
BytesMessage bytesMessage = (BytesMessage) message;
try {
byte[] bys = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(bys);
String codePage = message.getStringProperty(WMQConstants.JMS_IBM_CHARACTER_SET);
responseXml = new String(bys, codePage);
log.info("receive BytesMessage:{}", responseXml);
} catch (JMSException | UnsupportedEncodingException e) {
e.printStackTrace();
}
} else {
TextMessage textMessage = (TextMessage) message;
try {
responseXml = textMessage.getText();
log.info("receive TextMessage:{}", responseXml);
} catch (JMSException e) {
e.printStackTrace();
}
}
具体的可以参照IBM的帮助文档
https://www.ibm.com/support/knowledgecenter/zh/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032120_.htm