我找不到一种(很明显的)方法来将序列化 XML 的编码从默认的 UTF-8
更改为 ISO-8859-1
。我读了Usage Guide ,这让我认为必须有一种方法可以将 XMLOutputFactory
与 XmlFactory
一起使用来实现这一点,但我看不到一种方法来配置这些工厂中的任何一个以使用另一个工厂默认情况下编码,只有 createXMLEventWriter
我可以在其中传递编码。
我知道如何使用 ToXmlGenerator.Feature.WRITE_XML_DECLARATION
生成 XML 声明。所以我需要的是这样的声明:
<?xml version='1.0' encoding='ISO-8859-1'?>
当然,内容也应该用 ISO-8859-1
编码。
最佳答案
在ToXmlGenerator
source code ,你会发现 UTF-8
是硬编码的:
if (Feature.WRITE_XML_1_1.enabledIn(_formatFeatures)) {
_xmlWriter.writeStartDocument("UTF-8", "1.1");
} else if (Feature.WRITE_XML_DECLARATION.enabledIn(_formatFeatures)) {
_xmlWriter.writeStartDocument("UTF-8", "1.0");
} else {
return;
}
一次ToXmlGenerator
是 final
可能没有简单的方法来处理它。我已经提交了 issue在jackson-dataformat-xml
项目。
如果您坚持使用 JAXB,则可以使用 Marshaller.JAXB_ENCODING
控制 encoding
属性的值:
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
marshaller.marshal(foo, System.out);
查看此 answer .
关于xml - 如何使用 Jackson XmlMapper 控制编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52778143/