Apache camel文件解析问题与拆分和unicode字符

时间:2016-04-14 17:21:16

标签: unicode apache-camel

我需要做的就是读取.csv文件并将数据推送到数据库中。我面临的问题是该文件可能不遵循CSV格式,例如:“”“(两个双引号中的单个双引号),在这种情况下,apache camel抛出整个文件而不是那一条记录。为了解决这个问题,我决定拆分文件并逐行解组。在使用这种方法时,现在我面临另一个问题,即在标记身体后unicode字符没有被保留。有没有人面临同样的问题? 这是我的路线代码片段:

从(文件).split(体()。记号化( “\ r \ n” 个))。流()。解组(DATAFORMAT).END()

我尝试了一些事情来验证我的理论,即改变身体正在破坏unicode角色。以下是我尝试过的路线 1)from(file).to(file) - > Unicode字符被保留 2)from(file).split(body())。streaming()。to(file) - > unicode字符保留 3)from(file).convertBodyto(String.class,“UTF-8”)。split(body())。streaming() - > Unicode字符丢失 4)from(file).split(body(String.clasS))。streaming()。to(file) - > Unicode字符丢失。

我还验证了我的JVM使用UTF-8进行编码,我还尝试将文件组件中的charset参数设置为UTF-8,但没有任何改变。

有人可以帮我解决这个问题吗?

unicode字符§正在转换为倒置?

2 个答案:

答案 0 :(得分:0)

您确定您的文件是否具有UTF-8编码?您始终可以通过

强制执行交换编码
 <setProperty propertyName="Exchange.CHARSET_NAME">
      <constant>UTF-8</constant>
 </setProperty>

使用文件时,我通常会将交换编码设置为文件的确切位置,然后在读取之后将交换编码更改回UTF-8。

如果有帮助,请告诉我。

R上。

答案 1 :(得分:0)

在UNIX(通过驼峰)生成的文件中存在同样的问题,但仍然具有不可打印的ASCII字符。这导致了使用(流式传输)的拆分问题。我根据需要编写了一个简单的自定义拆分器来传输文件(文件大小只有几百MB)。

from("direct:process").split().method(FileSplitter.class, 
"split(${body})").shareUnitOfWork().streaming()

编写分割器很容易。我所要做的就是返回一个迭代器,它使用BufferedReader一次返回一行。