当前位置: 首页 > 知识库问答 >
问题:

在UTF-8 JAXB编组之后XML内容仍然是ISO 8859-1

通学真
2023-03-14
import org.apache.camel.converter.jaxb.JaxbDataFormat;

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

from("endpoint")

   .process(//createObjectBySettingTheDataFromSource)

   .marshal(jaxbDataFormat)

   .to(FILEENDPOINT?charset=utf-8&fileName=" +Filename);

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>     
     <Name>M��e Faࠥnder</Name> //Mürthe Faßender 

通过将文件编码更改为ISO8859-1,内容被成功解析。

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

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

问题只是在Linux下精确,有没有人知道如何操作ISO_8859_1数据并在xml中设置它而没有问题?

共有1个答案

伯英武
2023-03-14

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

所以我想,如果您不声明一个不同于UTF-8的输入字符集,然后以UTF-8的格式编写文件,那么就没有必要从Camels的角度转换任何内容。

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

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

.from("file:inbox?charset=iso-8859-1") 
.to("file:outbox?charset=utf-8") // conversion needed
.from("file:inbox") 
.convertBodyTo(byte[].class, "utf-8")
// message body is now a byte array and written to file as is
.to("file:outbox") 
 类似资料:
  • 我在OSX上从JDK 1.7->1.8升级时遇到了问题。升级已经完成,但是javac仍然返回1.7版本。 我已经从Oracle的主页下载了JDK8_U5,并运行了安装程序。 我还采取了以下步骤,安装后: 我浏览并删除了Java1.7(以及所有其他JDK版本),然后重新运行安装程序: 仍然没用,javac报告版本为1.7.0_21 在该路径中,是指向的符号链接。的内容是一系列文件(不是符号链接)。

  • 我使用LiveData从DB中选择信息,并将其传递给我的活动(通过DAO、Repository&Viewmodel),依赖于一段时间的日期。当我更改timespan时,我希望删除LiveData上的旧观察者,并为新的timespan创建新的观察者。 但是,在调用和(其中timespan是之前的另一个时间戳)之后,两个观察器都调用了方法,尽管旧的方法不再活动(我使用和检查了这一点) 有什么建议吗?

  • 问题内容: 嗨,我有一个客户端正在尝试使用以下HTTP标头向我们发布: 但是,我们的Web应用程序防火墙会不断将其拾取并引发错误: 消息:[文件“ /etc/httpd/modsecurity.d/10_asl_rules.conf”] [行“ 45”] [id“ 340362”] [msg“ Atomicorp.com WAF规则:ModSecurity不支持内容编码并且无法检测到使用它攻击,因

  • 问题内容: 使用firebug时,我在asp.net mvc 4项目中收到此有线错误“ NetworkError:415无法处理… xt / xml; charset = utf-8’– ”。 代码: 服务代码: 该接口是: 和网络配置,我在WCF中使用了无文件: 问题答案: 您需要使用,而不是代码中的常规。这将为端点配置适当的绑定()和行为()以遵守该属性。

  • 我试图使用独立的应用程序使用WCF web服务。我可以使用Internet Explorer查看此服务,也可以在Visual studio服务引用中查看。 这就是我得到的错误 如何更改它以使用正确的内容类型? 这是我的配置文件 这是堆栈

  • 有许多资源可以解释为什么需要内联显示图。例如%matplotlib内联的目的。然而,我觉得如果我们在你的木星笔记本中使用更高版本的IPython,那就没有必要了。这是因为我可以显示内联或不运行(每次我重启我的内核,我使用的IPython版本是7.17.0)。我的预感是,对于最近的版本,内联后端可能是默认激活的。 当我运行检查新会话上的当前后端时,它会显示Qt5Agg。运行后,当我通过运行再次检查时