2010-06-04 97 views
3

我正在接收來自jms mq隊列的消息,這些消息應該是utf-8編碼的。然而,在使用msgText =((TextMessage)msg)讀取輸出.getText(); 我收到了非標準字符存在的問題標記。在使用字節消息時指定編碼似乎是可能的,但我無法找到在讀出TextMessage時指定編碼的方式。有沒有辦法解決這個問題,或者我應該按字節消息?對JMS TextMessage進行編碼

+0

您使用哪個JMS傳輸?你傳遞XML消息嗎?您正在使用哪個平臺並從哪個平臺生成消息? – 2010-06-04 11:57:48

+0

我們在Websphere MQ上,消息是XML,encoding =「UTF-8」 – 2010-06-07 06:25:29

+0

我不確定哪個平臺正在生產,但我們正在使用在solaris上運行的Websphere。不幸的是,我們完全不知道mq的實現,因此我不能給出一個版本號。 – 2010-06-07 06:29:00

回答

2

我們嘗試添加Dfile.encoding="UTF-8"Websphere的JVM,我們加入

source = new StreamSource(new ByteArrayInputStream(
    ((TextMessage) msg).getText().getBytes("UTF-8"))); 

在我們MessageListener。這對我們很有用,所以我們拿出了Dfile.encoding一點,它仍然適用於我們。

由於Websphere的首選最小配置,我們決定以這種方式離開,同時考慮到我們可以更容易地通過文件或數據庫的設置來切換UTF-8字符串。

+0

謝謝,傑瑞博士:使用StreamSource爲我們工作。我們的XML消息從TIBCO JMS隊列中讀取,然後用JAXB API解組:\t \t \t的JAXBElement jbElement =(的JAXBElement )ourJaxb2Marshaller \t \t \t \t \t .unmarshal(StreamSource的); – Erikson 2014-03-28 14:39:54

1

如果文本沒有正確解碼,那麼客戶端可能不是用utf-8編解碼器發送消息;這應該工作:

byte[] by = ((TextMessage) msg).getText().getBytes("ISO-8859-1"); 
String text = new String(by,"UTF-8"); 
+0

這對我們不起作用。傑瑞博士指出,使用StreamSource類工作的是什麼。 – Erikson 2014-03-28 16:10:39