我有一个包含中文内容的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>
答案 0 :(得分:3)
您的代码在我的系统上正常运行。我能够创建一个包含中文字符的books.xml,在我的系统上运行代码并获得正确的输出。
[更新]
以前我认为你的books.xml文件是可疑的 - 但我终于能够通过设置-Dfile.encoding = ISO-8859-1在我的系统上重现你的问题。
在您的环境中某处,您的字符编码设置不正确。也许在JVM中,也许在显示字符的控制台中。
确保将String编写为UTF-8编码字节流的一种方法是更改:
System.out.println(strDoc);
到
System.out.write(strDoc.getBytes("UTF-8"));
这可能会也可能不会解决您在屏幕上看到的内容。您的控制台还必须配置为正确处理UTF-8编码数据。但是,如果将这些字节写入文件或套接字,则应该能够确认字节与原始文件中的字节匹配。