2009-12-23 65 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