我需要做的就是读取.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 回答
您确定您的文件具有UTF-8编码吗?您始终可以强制执行交换编码
在处理文件时,我通常会将交换编码设置为文件的确切内容,然后在读取之后将交换编码更改回UTF-8 .
如果这有帮助,请告诉我 .
R.
与在UNIX中生成的文件(通过驼峰)存在相同的问题但仍具有不可打印的ASCII字符 . 这导致了使用(流式传输)的拆分问题 . 我根据需要编写了一个简单的自定义拆分器来传输文件(文件大小只有几百MB) .
编写分割器很容易 . 我所要做的就是返回一个迭代器,它使用BufferedReader一次返回一行 .