1

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

1 回答 1

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 编码数据。但是,如果您将这些字节写入文件或套接字,您应该能够确认这些字节与原始文件中的字节匹配。

于 2012-10-12T14:35:59.613 回答