2012-10-12 68 views
1

我有一個包含中文內容的XML文件。但是,當顯示我收到問號。有人可以研究這個問題嗎?無法解析包含中文內容的XML文件

我是book.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<book> 
    <person> 
    <first>密碼</first> 
    <last>Pai</last> 
    <age>22</age> 
    </person> 
</book> 

而且我的代碼是:

public static void main (String argv []){ 
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse (new File("book.xml")); 
    String strDoc=getStringFromDocument(doc); 
    System.out.println(strDoc); 
} 

public static String getStringFromDocument(Document doc) { 
TransformerFactory transfac = TransformerFactory.newInstance(); 
Transformer trans = transfac.newTransformer(); 
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
trans.setOutputProperty(OutputKeys.INDENT, "yes"); 
StringWriter sw = new StringWriter(); 
StreamResult result = new StreamResult(sw); 
DOMSource source = new DOMSource(doc); 
trans.transform(source, result); 
String xmlString = sw.toString(); 
return xmlString.toString(); 
} 

我越來越??之後:

<?xml version="1.0" encoding="UTF-8"?> 
    <book> 
    <person> 
     <first>??</first> 
     <last>Pai</last> 
     <age>22</age> 
    </person> 

回答

3

你的代碼運行我的系統上的罰款。我能夠創建一個帶中文字符的books.xml,在我的系統上運行你的代碼並獲得正確的輸出。

[更新]

以前我還以爲你的Books.xml文件是犯罪嫌疑人 - 但我終於可以通過設置-Dfile.encoding = ISO-8859-1重現我的系統上的問題。

您的環境中的某處存在不正確的字符編碼設置。也許在JVM中,也許在顯示角色的控制檯中。

的一種方式,以確保你寫你的字符串作爲UTF-8編碼的字節流是改變:

System.out.println(strDoc); 

System.out.write(strDoc.getBytes("UTF-8")); 

這可能會或可能不會解決你是什麼在屏幕上看到。您的控制檯也必須配置爲正確處理UTF-8編碼數據。但是,如果將這些字節寫入文件或套接字,則應該能夠確認這些字節與原始文件中的字節匹配。

+0

我必須設置-Dfile.encoding = ISO-8859-1? – Peter

+0

取決於你的環境。從命令中將「java ...」替換爲「java -Dfile.encoding = ISO-8859-1 ...」。使用IDE只需按照IDE的說明將其添加到調試時指定「VM選項」或「VM參數」的任何位置。 –