Apache camel Camel:更改流编码

Apache camel Camel:更改流编码,apache-camel,Apache Camel,我正在通过该路由从http接收数据流: from("direct:foo"). to("http://foo.com/bar.html"). to("file:///tmp/bar.html") HTTP流带有Windows-1251编码。我想动态地重新编码到UTF-8,然后存储到文件 如何使用标准的camel方式执行此操作?请查看.convertBodyTo()——尤其是字符集参数 from("direct:foo"). to("http://foo.com/bar.html"). conv

我正在通过该路由从http接收数据流:

from("direct:foo").
to("http://foo.com/bar.html").
to("file:///tmp/bar.html")
HTTP流带有
Windows-1251
编码。我想动态地重新编码到
UTF-8
,然后存储到文件


如何使用标准的
camel
方式执行此操作?

请查看
.convertBodyTo()
——尤其是
字符集
参数

from("direct:foo").
to("http://foo.com/bar.html").
convertBodyTo(String.class, "UTF-8")
to("file:///tmp/bar.html")

参考资料:

请查看
.convertBodyTo()
——尤其是
字符集
参数

from("direct:foo").
to("http://foo.com/bar.html").
convertBodyTo(String.class, "UTF-8")
to("file:///tmp/bar.html")

参考资料:

我认为vikingsteve的解决方案遗漏了一步。输入流包含编码为CP1251的字符。当您将输入流内容转换为字符串时,该流中的字符不会更改其编码。您需要指定解码字符时对字符进行编码的实体所使用的相同字符编码方案。否则你会得到不想要的结果


我通过读取包含德国umlauts的CP1251编码文件来测试此功能:

steppra1@steppra1-linux-mint ~/Downloads $ file input_umlauts.txt 
input_umlauts.txt: ISO-8859 text, with CRLF line terminators

steppra1@steppra1-linux-mint ~/Downloads $ file output_umlauts.txt 
output_umlauts.txt: UTF-8 Unicode text, with CRLF line terminators
使用两个解码步骤,然后重新编码,得到正确编码的德国UMLAUT。如果我改变以上路线到



然后输出文件仍然是UTF-8编码的,可能是因为这是我的平台默认设置,但是UMLAUT是乱码。

我认为vikingsteve的解决方案遗漏了一步。输入流包含编码为CP1251的字符。当您将输入流内容转换为字符串时,该流中的字符不会更改其编码。您需要指定解码字符时对字符进行编码的实体所使用的相同字符编码方案。否则你会得到不想要的结果


我通过读取包含德国umlauts的CP1251编码文件来测试此功能:

steppra1@steppra1-linux-mint ~/Downloads $ file input_umlauts.txt 
input_umlauts.txt: ISO-8859 text, with CRLF line terminators

steppra1@steppra1-linux-mint ~/Downloads $ file output_umlauts.txt 
output_umlauts.txt: UTF-8 Unicode text, with CRLF line terminators
使用两个解码步骤,然后重新编码,得到正确编码的德国UMLAUT。如果我改变以上路线到



然后输出文件仍然是UTF-8编码的,可能是因为这是我的平台默认设置,但是UMLAUT是乱码。

您是否尝试过
convertBodyTo
convertBodyTo()
转换正文的
类型
,不编码发现它接受编码。谢谢现在就试试。我可以想象,您必须首先使用CP1251和
convertBodyTo()
将流转换为字符串。然后通过在文件端点URL上设置
charset
参数将该字符串转换为UTF-8。请将您的建议转换为答案,我会接受。您尝试过
convertBodyTo
convertBodyTo()
转换正文的
类型
,不编码发现它接受编码。谢谢现在就试试。我可以想象,您必须首先使用CP1251和
convertBodyTo()
将流转换为字符串。然后通过在文件端点URL上设置
charset
参数,将该字符串转换为UTF-8。请将您的建议转换为答案,我将接受。