【发布时间】:2020-03-10 17:51:27
【问题描述】:
我有以下问题: 对于一个项目,我创建了自己的记录器,它会生成一个带有自定义标签的 xml 文件。 问题是使用 DOM 和 JAXB 创建 XML 可能在编码方面存在问题。由于“内容”字段总是产生不正确的字符。 我已经尝试使用 UTF-8 / windows-1252 更改编码。 我发现实际上我随后运行记录器的项目使用 ISO-8859-1,我也尝试替换它,但没有。作为内容字段的输出,我总是得到这些难以理解的字符。 谁能帮帮我?
我的代码:
if (OS.contains("Window")) {
try {
fh = new FileHandler(userDir+s+logF+s+jade+s+nameAgent+"-receive(Logger Java).xml" );
logger.addHandler(fh);
XMLFormatter formatter = new XMLFormatter();
fh.setFormatter(formatter);
logger.info(" ");
}
catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
XmlCreator xmlcreator = new XmlCreator();
xmlcreator.setOntology(onto);
xmlcreator.setPerformative(perf);
xmlcreator.settimeStamp(ts);
xmlcreator.setProtocol(pro);
xmlcreator.setReceiver(rec);
xmlcreator.setContent(con);
try {
File file = new File("C:\\Users\\Francesco\\Desktop\\writereceiver.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(XmlCreator.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(xmlcreator, file);
jaxbMarshaller.marshal(xmlcreator, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
输出 XML(内容标签有问题):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xmlCreator>
<content>ˆ sr pojo.SongRequestInfoÃÃcÀWCë</content>
<performative>ACCEPT-PROPOSAL</performative>
<receiver>jade.util.leap.ArrayList$1@445c4a59</receiver>
<timeStamp>1583849551513</timeStamp>
</xmlCreator>
【问题讨论】:
-
con中有什么内容?它是什么类型的?它是如何定义的?谁来填?请出示相关代码。 -
看起来 XML 文件是正确的,而且您查看输出的方法没有识别出输出是 UTF-8。
-
con 和所有其他都是字符串
-
我使用 atom 我必须做的事情,看到它正确吗?我已经尝试过使用 UTF-8 更改编码