gpt4 book ai didi

java - xstream - 以 UTF-8 格式保存 XML 的正确方法

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:19 24 4
gpt4 key购买 nike

以前,为了通过 xstream 读取 UTF-8 编码的 XML,我使用 DomDriver 如下:

XStream xStream = new XStream(new DomDriver("UTF-8"));

但是,后来我意识到这非常慢。我使用以下方式:

Optimize loading speed of xstream

这至少工作得很好。

然而,后来,我意识到同样的技术不能应用于编写 XML。我会得到所有???字符。

这是在写入

期间使用 DomDriver 的最后一个可行代码
public static boolean toXML(Object object, File file) {
XStream xStream = new XStream(new DomDriver("UTF-8"));
OutputStream outputStream = null;

try {
outputStream = new FileOutputStream(file);
xStream.toXML(object, outputStream);
}
catch (Exception exp) {
log.error(null, exp);
return false;
}
finally {
if (false == close(outputStream)) {
return false;
}
outputStream = null;
}

return true;
}

上面的代码工作正常。为了配合不使用DomDriver的read方法,我把代码改成了

public static boolean toXML(Object object, File file) {
XStream xStream = new XStream();
OutputStream outputStream = null;
Writer writer = null;

try {
outputStream = new FileOutputStream(file);
writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
xStream.toXML(object, outputStream);
}
catch (Exception exp) {
log.error(null, exp);
return false;
}
finally {
if (false == close(writer)) {
return false;
}
if (false == close(outputStream)) {
return false;
}
writer = null;
outputStream = null;
}

return true;
}

这一次,我所有的汉字都变成了???

我可以知道我做错了什么吗?

最佳答案

看这段代码:

outputStream = new FileOutputStream(file);
writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
xStream.toXML(object, outputStream);

您正在创建一个将使用 UTF-8 的编写器 - 但随后完全忽略它!

试试这个:

xStream.toXML(object, writer);

另外,作为风格问题,我鼓励您考虑以下几点:

  • 不要将结果与 boolean 常量进行比较;只需使用 if (foo)if (!foo) 代替
  • 捕获异常非常很少是个好主意;而是捕获特定的异常
  • 返回 boolean 值以指示成功或失败不是 Java 惯用的;一般来说,如果某事失败了,异常(exception)情况会更好
  • 如果第一次 close 失败,您将在第二次 close 调用之前退出该方法,这可能不是您想要的。 (其实关闭OutputStreamWriter`无论如何都会关闭stream,但是要考虑事情的原理。)
  • 在方法结束时将局部变量设置为 null 是不必要的,并且会使代码困惑

关于java - xstream - 以 UTF-8 格式保存 XML 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642820/

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