我正在通过该路由从 http 接收数据流:
from("direct:foo").
to("http://foo.com/bar.html").
to("file:///tmp/bar.html")
HTTP 流带有 Windows-1251
编码。我想即时重新编码为 UTF-8
,然后存储到文件。
如何使用标准camel
方式做到这一点?
请您参考如下方法:
我认为 vikingsteve 的解决方案遗漏了一步。输入流包含编码为 CP1251 的字符。当您将输入流内容转换为字符串时,该流中的字符不会更改其编码。您需要指定在解码字符时对字符进行编码的实体所使用的相同字符编码方案。否则你会得到不想要的结果。
<route id="process_umlaug_file" startupOrder="2">
<from uri="file:///home/steppra1/Downloads?fileName=input_umlauts.txt"/>
<convertBodyTo type="java.lang.String" charset="ISO-8859-1"/>
<to uri="file:///home/steppra1/Downloads?fileName=output_umlauts.txt&charset=UTF-8"/>
</route>
我测试了读取包含德语变音符号的 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
使用解码然后重新编码的两个步骤产生正确编码的德语变音符号。如果我将上面的路线更改为
<route id="process_umlaug_file" startupOrder="2">
<from uri="file:///home/steppra1/Downloads?fileName=input_umlauts.txt"/>
<convertBodyTo type="java.lang.String" charset="UTF-8"/>
<to uri="file:///home/steppra1/Downloads?fileName=output_umlauts.txt"/>
</route>
然后输出文件仍然是 UTF-8 编码,可能是因为这是我的平台默认值,但元音变音是乱码。