有效负载的骡子没有给出特殊字符的确切字符串,例如Ø,€,@

时间:2013-04-24 15:52:12

标签: java activemq mule

我坚持使用下面的方案,并试图弄清楚这样做的确切方法。

Mule从MQ获取消息,而我从Mule有效负载中获取这些消息,无论是字节还是字符串,它都没有给出窄字符的确切字符,实际上这些字符和休息时会出现乱码消息人物很好。

我尝试将有效负载作为字符串使用UTF-8编码仍具有相同的输出。

我正在使用的代码是:

MuleMessage mmsg = eventContext.getMessage();
byte[] rawMsg = mmsg.getPayloadAsBytes();

String rawMsg = mmsg.getPayloadAsString();

String rawMsg = mmsg.getPayloadAsString("UTF-8");

任何变通方法或替代方案都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

Mule正在非常关注有效负载的数据编码,因此在发送给MQ本身的消息中(发布者实际上可能会严重编码它们)或者您自己处理它们时,一定有问题。

MuleEventMuleMessage类都有getEncoding()方法:最好使用此方法而不是硬编码到特定编码。

由于您收到了javax.jms.BytesMessage,我建议您使用标准转换器将其转换为字符串而不是自己动手,请在jms:inbound-endpoint之后使用以下内容:

<byte-array-to-string-transformer encoding="..." />

使用为encoding属性发送JMS消息的发布者使用的实际编码。

答案 1 :(得分:-1)

尝试使用此表达式:

#[message.payloadAs(String)]

这将为您提供String格式的有效负载,因此您不需要使用字节数组到字符串转换器。