无法解析包含中文内容的XML文件

无法解析包含中文内容的XML文件

问题描述:

我有一个包含中文内容的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> 

你的代码运行我的系统上的罚款。我能够创建一个带中文字符的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参数”的任何位置。 –