2012-09-18 43 views
0

我试图从数据库中检索到的数据创建一个csv文件。数据本身包含逗号,管道和任意数量的分隔符。我们选择使用非ascii断开的管道符号作为分隔符,这也必须存在于xml配置文件和java测试文件中。unix中忽略的ascii csv分隔符

当我们的java文件被部署到unix时,它会抱怨找到了无效字符,我猜是因为它在ascii文件中找到了非ascii字符。

因此,我们将文件转换为UTF-8,在Windows中将此字符显示为 字符。所以我们从UTF-8网站复制了破损的管道符号。现在在windows和unix编译好。然而,在Windows中测试运行良好,但没有在Unix中,因为它解释|作为Â

任何人都可以建议我应该如何处理这些文件,他们应该在什么格式?

我现在唯一能想到的其他解决方案是使用ascii字符作为分隔符的组合,我并不想这么做。

在此先感谢

回答

1

general approach是引用可能包含分隔符的字段。嵌入式引号然后通过使用两个引号来表示它们。这可能需要比您目前所做的更多的预处理/后处理,但会使代码更健壮(如果数据库字段开始使用嵌入的管道字符,会发生什么情况?)。

opencsv项目可以处理这个用例。

+0

我把它分成2条评论。感谢您的回应。我们遇到的麻烦是我们使用内部csv解析器,所以目前不能使用opencsv,所以我们不能扩展它来处理带引号的字段。我注意到你对未来在实际数据中使用分隔符的观点,这是一个风险。然而,目前我只需要一些帮助,使用破损的管道字符作为分隔符在Windows和Unix中都可以使用。 –

+0

一个想法是,unix机器上使用的默认编码是ascii,所以如果我们使用保存为cp1252的文件,那么该字符不会被解释。但是,当我们将它们保存为utf-8时,它们也没有被正确解释。我需要帮助的是克服这个最初的问题,然后可以稍后解决更大的设计问题(着名的遗言:)。 –

相关问题