【问题标题】:Camel: UTF-8 Encoding is lost after using GroupCamel:使用 Group 后 UTF-8 编码丢失
【发布时间】:2016-03-18 02:24:37
【问题描述】:

我正在使用 camel 2.14.1 并在 tokenize 标记中使用 group=10000 拆分带有中文/日文字符的巨大 xml 文件。 基于分组成功创建文件,但中日文本代码被转换为垃圾字符。

我尝试在使用“ConvertBodyTo”创建新的 XML 之前强制执行 UTF-8,但问题仍然存在。

谁能帮帮我!!

【问题讨论】:

  • 我观察到的一件事是新生成的文件中缺少 XML Prologue,并且怀疑这是导致问题的原因。 :S
  • 请显示您目前的代码,并与help center 联系以获取更一般的发布指南。
  • 我已经使用处理器类在我的拆分 xml(s) 中手动添加了 XML Prologue/DTD,即在我的处理器中创建一个文件,附加 XML DTD 标记并将正文发送回
  • 您收到反对票和接近票的原因是您的问题不包含我们需要的信息,以便我们花费有用的时间帮助您,更不用说解决您的问题了。请查看help center 中的发布指南,然后查看edit 您的问题以提供缺失的详细信息。通常,您的问题应该是独立的,包括您遇到问题的代码,以及输入样本、实际输出和预期输出。希望这会有所帮助。

标签: encoding utf-8 apache-camel tokenize


【解决方案1】:

我在尝试使用带有分组的标记化拆分 csv 文件时遇到了类似的问题。

示例 csv 文件:(带分隔符 - '|') CandidateNumber|CandidateLastName|CandidateFirstName|EducationLevel

CAND123C001|Wells|Jimmy|学士学位(±16 年)

CAND123C002|Wells|Tom|学士学位(±16 年)

CAND123C003|Wells|James|学士学位(±16 年)

CAND123C004|Wells|Tim|学士学位(±16 年)

± 字符在分组标记后损坏。我最初假设问题在于没有为拆分设置正确的文件编码,但交换似乎具有属性 CamelCharsetName=ISO-8859-1 的正确值。

from("file://<dir with csv files>?noop=true&charset=ISO-8859-1")
.split(body().tokenize("\n",2,true)).streaming()
.log("body: ${body}");

同样适用于不使用分组。

from("file://<dir with csv files>?noop=true&charset=ISO-8859-1")
.split(body().tokenize("\n")).streaming()
.log("body: ${body}");

感谢这篇文章,它确认问题出在分组时。

查看骆驼代码库中的GroupTokenIterator,问题似乎出在使用 TypeConverter 将 String 转换为 InputStream 的方式上

// convert to input stream
InputStream is =
camelContext.getTypeConverter().mandatoryConvertTo(InputStream.class, data);
...

注意:mandatoryConvertTo() 有一个带有交换的重载方法

<T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value)

由于交换不是作为参数传递的,它总是使用系统属性“org.apache.camel.default.charset”回退到默认字符集

潜在修复:

// convert to input stream
InputStream is =
camelContext.getTypeConverter().mandatoryConvertTo(InputStream.class, exchange, data);
...

由于此修复在骆驼核心中,另一个可能的选择是使用不分组的拆分并将 AgrregateStrategycompletionSize()completionTimeout() 一起使用.

虽然在 camel-core 中解决这个问题会很棒。

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2015-01-29
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多