2014-01-06 55 views
2

我已經被這個問題困擾了好幾個星期了。我有一個從Autonomy IDOL搜索中收到的XML文檔,並且可以將它成功解組爲一組Java對象。但是,如果有國際字符(例如中文,日文,俄文/西里爾文),它們會轉換爲問號(?)。JAXB國際字符解組導致問號(?)

XML文檔的第一行將編碼設置爲UTF-8:<?xml version =「1.0」encoding =「UTF-8」standalone =「yes」? >

我使用下面的代碼爲解組操作:

public static AutnResponse convertXmlToResponse(String xml) { 
    AutnResponse resp = null; 

    try { 
     JAXBContext jc = JAXBContext.newInstance(AutnResponse.class); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 

     resp = (AutnResponse) unmarshaller.unmarshal(new InputStreamReader(new ByteArrayInputStream(xml.getBytes()),"UTF-8")); 
    } catch(Exception ex) { 
     System.out.println("Caught exception trying to unmarshal XML file: " + ex.getMessage()); 
     ex.printStackTrace(System.out); 
    } 

    return resp; 
} 

是否有我忽視的東西?任何幫助,提示或其他資源將非常感激。我搜索了無數的Google列表,但無法解決這個問題。

回答

1
xml.getBytes() 

...應該是...

xml.getBytes("UTF-8") 

......從而使轉碼操作是對稱的。

但既然已經有字符數據,只是用...

unmarshaller.unmarshal(new StringReader(xml)); 
+0

感謝您的提示。我嘗試了兩種方法,但仍然收到問號。 – ctg2366

+0

@ ctg2366 - 你在哪裏看到問號?我看到JAXB正確處理字符的情況,但人員編輯無法正常工作,即使實際文檔正確時,他們也會在查看文檔時看到問號。 –

+1

@BlaiseDoughan謝謝你的回覆。你的評論讓我想到了這一點。我在Eclipse中運行它,並在控制檯以及發送數據的JSP頁面上看到問號。不過,我將Eclipse中的默認字符集更改爲UTF-8,並在解組後輸出數據,現在我正確地看到了國際字符。但是,在由JSP呈現之後,它們仍然在瀏覽器中顯示爲問號。我現在將查看JSP代碼。 – ctg2366

0

有一個很好的機會,JAXB正確渲染的字符。問題可能是您用來查看生成文檔的工具。


UPDATE

@BlaiseDoughan感謝您的答覆。你的評論讓我想到了 。我在Eclipse中運行這個工具,並在控制檯以及發送 數據的JSP頁面上看到 標記。但是,我將Eclipse中的默認字符集更改爲UTF-8和 ,以便在解組後輸出數據,現在我正確地看到了 國際字符。但是,在由JSP呈現後,它們仍然在瀏覽器中顯示 作爲問號。 I 現在將查看JSP代碼。

根據您的調查,這似乎是問題所在。

+1

問題終於解決了。我的JSP頁面缺少以下標記:<%@ page language =「java」contentType =「text/html; charset = utf-8」pageEncoding =「utf-8」%>頁面標記爲,但這還不夠。謝謝! – ctg2366