IBM MQ 接收BytesMessage类型的消息转成String出现乱码

从字节流消息中读取消息,转成字符类型出现中文乱码,实际上是由于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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值