我想使用OpenCSV解析CSV文件。其中一列以YAML序列化格式存儲數據,因爲它裏面可以有逗號而被引用。它裏邊還有引號,所以通過放兩個引號就可以逃脫。我能夠在Ruby中輕鬆解析這個文件,但是使用OpenCSV我無法完全解析它。它是一個UTF-8編碼文件。使用OpenCSV在引用字段內使用雙引號解析CSV
這裏是一個試圖讀取該文件
CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(csvFilePath), "UTF-8"), ',', '\"', '\\');
下面是這個文件2行我的Java代碼。第一行沒有被正確解析,並且因爲我猜想出現了雙引號而在""[Fair Trade Certified]""
處分裂。
1061658767,update,1196916,Product,28613099,Product::Source,"---
product_attributes:
-
- :name: Ornaments
:brand_id: 49120
:size: each
:alcoholic: false
:details: ""[Fair Trade Certified]""
:gluten_free: false
:kosher: false
:low_fat: false
:organic: false
:sugar_free: false
:fat_free: false
:vegan: false
:vegetarian: false
",,2015-11-01 00:06:19.796944,,,,,,
1061658768,create,,,28613100,Product::Source,"---
product_id:
retailer_id:
store_id:
source_id: 333790
locale: en_us
source_type: Product::PrehistoricProductDatum
priority: 1
is_definition:
product_attributes:
",,2015-11-01 00:06:19.927948,,,,,,
「標準」 對的CSV文件是RFC4180,但並不總是遵循。它包括用逗號引用字段,並將內部引號轉換爲兩個引號。谷歌搜索「RFC4180 Java解析器」出現了一些可能性。 – Paul
With * OpenCSV *你無法解析它。信貸到期的信貸。 – EJP
@EJP不知道你暗示的是什麼:)但無論如何,使用與RFC4180兼容的解析器修復了它。 – invinc4u