首页 文章

Apache camel文件解析分裂和unicode字符的问题

提问于
浏览
1

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

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

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

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

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

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

2 回答

  • 0

    您确定您的文件具有UTF-8编码吗?您始终可以强制执行交换编码

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

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

    如果这有帮助,请告诉我 .

    R.

  • 0

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

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

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

相关问题