本文講解一種常見的CSV文件標準,設定文件中的行分隔符,列分隔符,如何處理值中的單引號,雙引號,逗號,換行符等。
CSV文件,全程Comma-separated values,就是逗號分隔的數據文件。常用於數據集成的數據交換部分標準部分。
最近看到一個項目組在討論介面文件CSV的規範,真是替他們著急。討論點:
- 文件是否有標題行(header row),一方堅持要有,介面另一方堅持不能有。
- 行分割符,一方堅持使用Unix style的0x0A字元,另一方堅持使用Windows/Dos風格的0x0D0x0A(或者說\r\n),回車換行兩個字元。
- 列分隔符,一方堅持使用一個不可見字元0x05,說防止和內容字元串衝突,另一方堅持使用0x1B(ESC鍵)。
- 字元串中如果有換行怎麼處理,也沒有統一的意見。
不會Google真可怕,這個東西很簡單,先看是否有標準,如果有嚴格按照標準走。如果沒有標準,看是否有常見做法(或者叫事實標準)。Google一下關鍵字“CSV”,第一條就是維基百科(wikipedia)的解釋。
An official standard for the CSV file format does not exist, but RFC 4180 provides a de facto standard for many aspects of it.
Jiger: CSV沒有正式標準,但是國際互聯網工程任務組(IETF)給推薦標準RFC 4180描述了CSV文件的結構。
下麵一種常見配置:
- MS-DOS-style lines that end with (CR/LF) characters (optional for the last line)
Jiger: {使用回車換行(兩個字元)作為行分隔符,最後一行數據可以沒有這兩個字元。}- An optional header record (there is no sure way to detect whether it is present, so care is required when importing).
Jiger:{標題行是否需要,要雙方顯示約定}.- Each record "should" contain the same number of comma-separated fields.
Jiger:{每行記錄的欄位數要相同,使用逗號分隔。} 逗號是預設使用的值,雙方可以約定別的。- Any field may be quoted (with double quotes).
Jiger:{任何欄位的值都可以使用雙引號括起來}. 為簡單期間,可以要求都使用雙引號。- Fields containing a line-break, double-quote, and/or commas should be quoted. (If they are not, the file will likely be impossible to process correctly).
Jiger:{欄位值中如果有換行符,雙引號,逗號的,必須要使用雙引號括起來。這是必須的。}- A (double) quote character in a field must be represented by two (double) quote characters.
Jiger:{如果值中有雙引號,使用一對雙引號來表示原來的一個雙引號}
如果使用了以上推薦標準,可以減少很多時間來討論方案。