xml - 如何使用 Jackson XmlMapper 控制编码?

标签 xml jackson jackson-dataformat-xml

我找不到一种(很明显的)方法来将序列化 XML 的编码从默认的 UTF-8 更改为 ISO-8859-1。我读了Usage Guide ,这让我认为必须有一种方法可以将 XMLOutputFactoryXmlFactory 一起使用来实现这一点,但我看不到一种方法来配置这些工厂中的任何一个以使用另一个工厂默认情况下编码,只有 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;
}

一次ToXmlGeneratorfinal 可能没有简单的方法来处理它。我已经提交了 issuejackson-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/

相关文章:

java - @JacksonXmlProperty(isAttribute = true) 使用 Jackson XmlMapper 附加唯一 id

java - 不同包中源文件的 Android ClassNotFoundException

java - 如何更新ViewPager中所选项目的样式?

C# WriteAttributeString - 多元素

java - Springboot 1.5.1迁移到2.0.1实例格式

java - 让Spring使用Jackson在GET端点中转换JSON编码的@RequestParam

spring-mvc - Spring MVC : The request sent by the client was syntactically incorrect

java - mkdirs() 在 Gingerbread 上不起作用?

java - 使用动态字段反序列化嵌套 XML

java - jackson Xml : How to add namespace only on root?