Apache camel文件解析问题,带有拆分和unicode字符

Apache camel文件解析问题,带有拆分和unicode字符,unicode,apache-camel,Unicode,Apache Camel,我所需要做的就是读取一个.csv文件并将数据推送到数据库中。我面临的问题是文件可能不遵循CSV格式,例如:“(两个双引号中的一个双引号),在这种情况下,apache camel会抛出整个文件而不是一条记录。为了克服这个问题,我决定拆分文件并逐行解组。在使用这种方法时,现在我面临另一个问题,即在标记正文后unicode字符不会被保留。有人遇到过同样的问题吗? 以下是我的路线代码片段: from(file).split(body().tokenize(“\r\n”)).streaming().unm

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

from(file).split(body().tokenize(“\r\n”)).streaming().unmarshal(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字符§正在转换为反向?

您确定您的文件具有UTF-8编码吗?您可以通过以下方式强制执行exchange编码:

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

UTF-8
在处理文件时,我通常将exchange编码设置为文件的确切内容,然后在读取文件后,将exchange编码更改回UTF-8

让我知道这是否有帮助


R.

您确定您的文件具有UTF-8编码吗?您可以通过

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

UTF-8
在处理文件时,我通常将exchange编码设置为文件的确切内容,然后在读取文件后,将exchange编码更改回UTF-8

让我知道这是否有帮助


R.

在UNIX中生成的文件(通过camel)也有同样的问题,但仍然有不可打印的ASCII字符。这导致使用的拆分(流式处理)出现问题。我求助于编写一个简单的自定义拆分器,因为我需要流式处理文件(文件大小为几百MB)


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

在UNIX中生成的文件(通过camel)也有同样的问题,但仍然有不可打印的ASCII字符。这导致使用(流)的拆分出现问题。我求助于编写一个简单的自定义拆分器,因为我需要对文件进行流式处理(文件大小只有几百MB)


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

我将路由更改为:from(file).setProperty(Exchange.CHARSET_NAME,constant(“UTF-8”).convertBodyTo(String.class”).split(body().tokenize(\r\n”).streaming().process().end和unicode字符仍在损坏这就是为什么我认为您的文件很可能不是UTF-8编码的原因。您是否尝试过其他编码,如iso-8859-1?请对其进行调试,并查看更改交换编码时正文的外观。“Zu·iga”是我在使用IS0-8859-1时看到的,“Zu”�iga“在使用UTF-8时,感谢您将我引向正确的方向。我在终端上运行file-I命令,并意识到我试图解析的文件的字符集是us ascii。我将属性更改为us ascii,文件解析正确;但是,我的路由没有按照我的问题中提到的那样工作。from(file)。split(body().tokenize(\r\n”)).streaming().unmarshal(dataformat).end()…它无法处理该unicode字符并出错。当使用“us ascii”将正文转换为字符串时,它不会保留原始符号。我回到了原点:(好的,这听起来已经有了改进。在读取文件之后和拆分之前,您可以将字符集更改回UTF-8吗?我将路由更改为以下内容:from(file).setProperty(Exchange.charset\u NAME,constant(“UTF-8”).convertBodyTo(String.class”).split(body().tokenize(\r\n”)).streaming().process().end和unicode字符仍在损坏这就是为什么我认为您的文件很可能不是UTF-8编码的原因。您是否尝试过其他编码,如iso-8859-1?请对其进行调试,并查看更改交换编码时正文的外观。“Zu·iga”是我在使用IS0-8859-1时看到的,“Zu”�iga“在使用UTF-8时,感谢您将我引向正确的方向。我在终端上运行file-I命令,并意识到我试图解析的文件的字符集是us ascii。我将属性更改为us ascii,文件解析正确;但是,我的路由没有按照我的问题中提到的那样工作。from(file)。split(body().tokenize(\r\n”)).streaming().unmarshal(dataformat).end()…它无法处理该unicode字符并出错。当使用“us ascii”将正文转换为字符串时,它不会保留原始符号。我回到了原点:(好的,这听起来已经有了改进。在读取文件之后和分割之前,您能将字符集更改回UTF-8吗?