关于java:UTF-8 JAXB Marshalling后XML内容仍然是ISO 8859-1 | 珊瑚贝

XML content still ISO 8859-1 after UTF-8 JAXB Marshalling


我正在使用骆驼创建一个 JAXB 对象,对其进行编组,然后将结果写入 UTF-8 编码的 XML 文件。
我的一些 xml 内容是从使用 ISO 8859-1 编码的数据源中获取的:

hier 是我的骆驼路线:

1
2
3
4
5
6
7
8
9
10
11
import org.apache.camel.converter.jaxb.JaxbDataFormat;

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat(Claz.class.getPackage().getName());

from(“endpoint”)

   .process(//createObjectBySettingTheDataFromSource)

   .marshal(jaxbDataFormat)

   .to(FILEENDPOINT?charset=utf8&fileName=” +Filename);

XML 生成成功,但是从源获取的数据内容仍然是 ISO 编码,没有用 UTF8 解析。

1
2
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>    
     <Name>M??????e Faà¥nder</Name> //M??rthe Fa??ender

将文件编码更改为 ISO 8859-1 即可成功解析内容。

我尝试在将数据设置到 JAXB 对象之前对其进行转换,但仍未在 UTF-8 中解析。

1
2
  byte[] nameBytes = name.getBytes(StandardCharsets.ISO_8859_1);
  return new String(nameBytes, StandardCharsets.UTF_8);

问题只是在 Linux 下出现,有没有人知道如何操作 ISO_8859_1 数据并在 xml 中毫无问题地设置它?

  • 我对与双重转换相关的字符集有类似的问题:issues.apache.org/jira/browse/CAMEL-10053 不确定它是否适用于此,我使用 .removeProperty(Exchange.CHARSET_NAME) 来避免双重字符集更改


嗯,UTF-8 是默认字符集(至少对于文件端点而言),AFAIK Camel 不会尝试分析输入消息的给定字符集。

所以我猜如果你不声明一个不同于 UTF-8 的输入字符集,然后将文件写为 UTF-8,那么从 Camels 的angular来看,就不需要转换任何东西。

1
2
.from(“file:inbox”) // implicit UTF-8
.to(“file:outbox?charset=utf-8”) // same charset, no conversion needed

至少对于文件,您可以声明源编码,以便 Camel 知道它必须转换有效负载。

1
2
.from(“file:inbox?charset=iso-8859-1”)
.to(“file:outbox?charset=utf-8”) // conversion needed

如果您无法声明输入字符集(我认为这取决于端点类型),则必须显式转换有效负载。

1
2
3
4
.from(“file:inbox”)
.convertBodyTo(byte[].class,“utf-8”)
// message body is now a byte array and written to file as is
.to(“file:outbox”)

有关详细信息,请参阅 Camel 文件文档中的”使用字符集”部分。

  • 嗨 burki,我正在将编组对象的结果写入文件中,并设置来自 ISO_8859_1 源的一些数据,编组器本身采用 utf-8 编码。将正文转换为 utf-8 并不能解决问题。
  • 啊,抱歉,您的意思是您只将一些 ISO 编码的”数据片段”放入已经 UTF-8 编码的 XML 文件中?
  • 是的,我正在使用我的 JAXB 对象的编组结果生成一个 xml 文件。一些 JAXB 对象属性包含 ISO 编码属性。
  • 那么你必须自己转换这些信息位。您可以指示 Camel 转换整个消息负载,但不能转换负载的一小部分。它应该如何知道要转换什么以及要保留什么?但是,您当然可以编写一个执行这些特定转换的 Bean,并将其用作您的骆驼路线中的处理器。


来源:https://www.codenong.com/57398611/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?