2009-12-23 50 views
3

我正在寻找具有适当处理Unicode数据的CSV(逗号分隔值)解析器的Java实现,例如,包含中文文本的UTF-8 CSV文件。我想这样的解析器应该在迭代,比较等内部使用代码点相关的方法。Apache 2许可证或类似的许可证会最好。Java中支持Unicode的CSV解析器

+0

http://sourceforge.net/projects/javacsv/试试吧 – Bozho 2009-12-23 18:17:26

+1

大多数CSV解析器都应该处理16位字符。你是否说你需要32位字符支持? – 2009-12-23 18:19:42

+0

我尝试了几个解析器,其中包括一个来自其他项目的内部解析器。 所以看起来他们都尝试在内部通过迭代使用1)读取行2)使用charAt()进行遍历,并追加到一些临时字符。我有中文文本的UTF-8文件,有些符号用3个字节编码,所以不起作用。看来即使在许多解析器中,启动BOM也没有正确处理。 – 2009-12-23 19:33:25

回答

-1

写起来很容易。使用FileInputStream和使用UTF-8的InputStreamReader打开文件。将它包装在BufferedReader中,你可以使用readLine()来遍历它。将每一行作为一个字符串。使用正则表达式将其分割成字段。

唯一棘手的部分是构造正则表达式,因此它们不会将用引号括起来的逗号视为字段分隔符。

上面的方法效率不高,但对大多数应用程序足够快。如果你有真正的性能需求,那么你需要通过字符迭代的东西。几年前我写了一篇使用可以正常工作的状态机。

+0

这比晚上我没有噩梦的时候所能承受的更为直接:-)我现在正在寻找可以随时使用的图书馆。 – 2009-12-23 19:37:26

+0

这实际上是*不直接。这个简单的例子可以用正则表达式来处理,但是当你进入包含逗号或者(可选)引号的字段时,Regex将不起作用。对于某些工作来说,正则表达式是一个很好的工具,但它不能代替写得很好的解析器。 – 2009-12-24 03:43:16

+0

我认为它会工作,只会更复杂一点。谷歌提供了很好的正则表达式使用,看到这里例如:http://www.programmersheaven.com/user/Jonathan/blog/73-Splitting-CSV-with-regex/ – 2009-12-24 11:08:45

4

我不相信重新发明轮子。所以我不想写我自己的解析器,并且经历别人做的同样的麻烦。

我个人喜欢Ostermiller的CSV分析器。如果感兴趣,他们也有一个Maven仓库。


您还可以检查出OpenCSV。已经有关于解析unicode的Stack Overflow question

+0

这一个看起来不错,甚至直接声明以支持中文,但我认为它的GPL,这是我不能用于我的工作。 – 2009-12-23 19:51:31