搜索

104.9. 使用 charset

download PDF

对于 Camel 2.9.3
charset 选项允许在消费者和生成者端点上配置文件的编码。例如,如果您读取 utf-8 文件,并希望将文件转换为 iso-8859-1,您可以执行以下操作:

from("file:inbox?charset=utf-8")
  .to("file:outbox?charset=iso-8859-1")

您还可以在路由中使用 convertBodyTo。在以下示例中,我们仍然以 utf-8 格式输入文件,但我们希望将文件内容转换为 iso-8859-1 格式的字节阵列。然后让 bean 进程处理数据。在使用当前的 charset 将内容写入 outbox 文件夹之前。

from("file:inbox?charset=utf-8")
  .convertBodyTo(byte[].class, "iso-8859-1")
  .to("bean:myBean")
  .to("file:outbox");

如果您在消费者端点上省略 charset,则 Camel 不知道文件的 charset,默认情况下会使用 "UTF-8"。但是,您可以配置 JVM 系统属性,以覆盖和使用键 org.apache.camel.default.charset 的不同默认编码。

在以下示例中,如果文件不在 UTF-8 编码中,这可能会造成问题,这是读取文件的默认编码。
在编写文件时,内容已转换为字节阵列,因此将内容直接写为原样(无需进一步编码)。

from("file:inbox")
  .convertBodyTo(byte[].class, "iso-8859-1")
  .to("bean:myBean")
  .to("file:outbox");

您还可以通过使用 Exchange.CHARSET_NAME 在交换上设置属性,在编写文件时覆盖和控制编码动态。例如,在下面的路由中,我们将属性设置为消息标头中的值。

from("file:inbox")
  .convertBodyTo(byte[].class, "iso-8859-1")
  .to("bean:myBean")
  .setProperty(Exchange.CHARSET_NAME, header("someCharsetHeader"))
  .to("file:outbox");

我们建议更加简单,因此,如果您选择具有相同编码的文件,并希望使用端点上的 charset 选项写入文件,则最好使用端点上的 charset 选项。

请注意,如果您明确在端点上配置了 charset 选项,则使用该配置,而不考虑 Exchange.CHARSET_NAME 属性。

如果您有一些问题,您可以在 org.apache.camel.component.file 上启用 DEBUG 日志记录,并在使用特定的 charset 读取/写文件时,启用 Camel 日志。
例如,以下路由会记录以下内容:

from("file:inbox?charset=utf-8")
  .to("file:outbox?charset=iso-8859-1")

和日志:

DEBUG GenericFileConverter           - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt with charset utf-8
DEBUG FileOperations                 - Using Reader to write file: target/charset/output.txt with charset: iso-8859-1
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.