我正在尋找具有適當處理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