分裂和Unicode字符的Apache骆驼文件解析问题

问题描述:

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

从(文件).split(体()令牌化( “\ r \ n”))流()解组(DATAFORMAT).END()

我尝试了几件事来验证我的理论,即修改身体正在破坏unicode字符。以下是路由th在我试过 1)from(file).to(file) - > Unicode字符被保留 2)from(file).split(body()).stream()。to(file) - > unicode character preserved 3)from(file).convertBodyto(String.class,“UTF-8”)。split(body())。streaming() - > Unicode字符丢失 4)from(file).split(body(String.clasS ))。streaming()。到(file) - > Unicode字符丢失。

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

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

unicode字符§正在转换为反转?

你确定你的文件有UTF-8编码吗?你总是可以通过

<setProperty propertyName="Exchange.CHARSET_NAME"> 
     <constant>UTF-8</constant> 
</setProperty> 

执行交换编码使用文件时,我通常设置交换编码完全相同的文件是什么,然后阅读它,改变交换编码回UTF-8之后。

让我知道这是否有帮助。

R.

+0

我将路线更改为以下路径:from(file).setProperty(Exchange.CHARSET_NAME,constant(“UTF-8”))。convertBodyTo(String.class).split(body()。tokenize(“\ r \ n“))。streaming()。process()。end和unicode字符仍然被破坏 – Pri

+0

这就是为什么我认为你的文件很可能不是用UTF-8编码。有你尝试过的其他编码,如iso-8859-1?还要调试它,并在更改交换编码时查看机体的外观。 –

+0

“Zu¤iga”是我使用IS0-8859-1时看到的,使用UTF-8时的“Zu iga” – Pri

只好与在UNIX中产生(通过骆驼),但仍然有不可打印的ASCII字符文件相同的问题。这导致了正在使用(流式传输)的分割问题。我使用了一个简单的自定义分割器来编写文件(文件大小为几百MB)。

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

写入分离器很容易。我所要做的只是返回一个使用BufferedReader的迭代器,一次返回一行。