gpt4 book ai didi

java - UTF-8 写入 xml 成功

转载 作者:行者123 更新时间:2023-11-30 07:23:08 24 4
gpt4 key购买 nike

今天我遇到了一个非常有趣的问题。当我尝试重写 xml 文件时。

我有 3 种方法可以做到这一点。我想知道问题的最佳方法和原因。

我.

File file = new File(REAL_XML_PATH);
try {
FileWriter fileWriter = new FileWriter(file);
XMLOutputter xmlOutput = new XMLOutputter();

xmlOutput.output(document, System.out);
xmlOutput.output(document, fileWriter);

fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

在这种情况下,我的应用出现了大问题。用我自己的语言写入文件后,我什么也看不懂。编码文件在 ANSI javax.servlet.ServletException: javax.servlet.jsp.JspException: Invalid argument looking up property: "document.rootElement.children[0].children"

上更改

二。

File file = new File(REAL_XML_PATH);
XMLOutputter output=new XMLOutputter();
try {
output.output(document, new FileOutputStream(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

在这种情况下,我没有问题。编码没有改变。读写都没有问题。

还有这篇文章http://tripoverit.blogspot.com/2007/04/javas-utf-8-and-unicode-writing-is.html

我想知道问题的最佳解决方法和原因。

最佳答案

嗯,这看起来像问题:

FileWriter fileWriter = new FileWriter(file); 

这将始终使用平台默认编码,这很少是您想要的。假设您的默认编码是 ISO-8859-1。如果您的文档声明自己以 UTF-8 编码,但您实际上以 ISO-8859-1 编写所有内容,那么如果您有任何非 ASCII 字符,您的文件将无效 - 您将最终用 ISO-8859-1 单字节表示形式写出它们,这不是有效的 UTF-8。

我实际上会向 XMLOutputter 而不是 Writer 提供一个流。这样,文件声明的编码与作者使用的编码之间就没有冲突的余地。所以只需将您的代码更改为:

FileOutputStream fileOutput = new FileOutputStream(file);
...
xmlOutput.output(document, fileOutput);

...正如我现在看到您在第二段代码中所做的那样。所以是的,这是首选方法。在这里,流不假设要使用的编码,因为它只是处理二进制数据。 XML 编写代码决定二进制数据是什么,它可以确保它真正使用的字符编码与文件开头的声明相匹配。

您还应该清理您的异常处理 - 不要只是打印堆栈跟踪并在失败时继续,并在 finally 中调用 close code> block 而不是在 try block 的末尾。如果您不能真正地处理异常,要么让它直接向上传播堆栈(可能向您的方法添加 throws 子句),要么捕获它、记录它然后重新抛出异常或更合适的异常原因。

关于java - UTF-8 写入 xml 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12209726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com