我正在寻找具有适当处理Unicode数据的CSV(逗号分隔值)解析器的Java实现,例如,包含中文文本的UTF-8 CSV文件。我想这样的解析器应该在迭代,比较等内部使用代码点相关的方法。Apache 2许可证或类似的许可证会最好。Java中支持Unicode的CSV解析器
回答
写起来很容易。使用FileInputStream和使用UTF-8的InputStreamReader打开文件。将它包装在BufferedReader中,你可以使用readLine()来遍历它。将每一行作为一个字符串。使用正则表达式将其分割成字段。
唯一棘手的部分是构造正则表达式,因此它们不会将用引号括起来的逗号视为字段分隔符。
上面的方法效率不高,但对大多数应用程序足够快。如果你有真正的性能需求,那么你需要通过字符迭代的东西。几年前我写了一篇使用可以正常工作的状态机。
这比晚上我没有噩梦的时候所能承受的更为直接:-)我现在正在寻找可以随时使用的图书馆。 – 2009-12-23 19:37:26
这实际上是*不直接。这个简单的例子可以用正则表达式来处理,但是当你进入包含逗号或者(可选)引号的字段时,Regex将不起作用。对于某些工作来说,正则表达式是一个很好的工具,但它不能代替写得很好的解析器。 – 2009-12-24 03:43:16
我认为它会工作,只会更复杂一点。谷歌提供了很好的正则表达式使用,看到这里例如:http://www.programmersheaven.com/user/Jonathan/blog/73-Splitting-CSV-with-regex/ – 2009-12-24 11:08:45
这一个看起来不错,甚至直接声明以支持中文,但我认为它的GPL,这是我不能用于我的工作。 – 2009-12-23 19:51:31
你试过Commons CSV?
- 1. C++中支持Unicode的CSV解析器
- 2. Woodstox解析器不支持某些Unicode字符
- 3. 解析java中的CSV
- 4. 故障解析的Unicode CSV文件
- 5. 支持CSS3的C/C++ CSS解析器?
- 6. Android的JSON解析器支持revivers吗?
- 7. 对Apache Tika解析器的OneNote支持
- 8. 解码的Python不支持Unicode
- 9. java无法解析unicode'\ x00a0'
- 10. Java unicode字节解析
- 11. android支持unicode?
- 12. PDFTable Unicode支持
- 13. C11 Unicode支持
- 14. python unicode支持
- 15. InstallShield2009 Unicode支持
- 16. System.Directory.getDirectoryContents Unicode支持
- 17. android中的unicode支持ndk
- 18. PySide中的Unicode支持
- 19. 支持注释的Java源代码解析器
- 20. 是否有支持韩语的Java SQL解析器?
- 21. 澄清Java对Unicode的进化支持
- 22. Java版本支持的Unicode版本6
- 23. 支持SAX 2.0 compilant解析器
- 24. SolrNet是否支持查询解析器?
- 25. 解析CSV文件的Java
- 26. 对unicode的支持flex(词法分析器)
- 27. python 3.1.3是否支持csv模块中的unicode?
- 28. TypeError:解码Unicode不支持python
- 29. 支持Paw中的XML解析
- 30. Java正则表达式支持Unicode吗?
http://sourceforge.net/projects/javacsv/试试吧 – Bozho 2009-12-23 18:17:26
大多数CSV解析器都应该处理16位字符。你是否说你需要32位字符支持? – 2009-12-23 18:19:42
我尝试了几个解析器,其中包括一个来自其他项目的内部解析器。 所以看起来他们都尝试在内部通过迭代使用1)读取行2)使用charAt()进行遍历,并追加到一些临时字符。我有中文文本的UTF-8文件,有些符号用3个字节编码,所以不起作用。看来即使在许多解析器中,启动BOM也没有正确处理。 – 2009-12-23 19:33:25