1. 程式人生 > >CSV檔案的轉義處理

CSV檔案的轉義處理

原文:http://blog.csdn.net/maqingli20/article/details/7095132

------------------------------------------------------------------------------------

 CSV檔案是一種適合程式格式化輸出資料的檔案格式。它使用英文逗號作為列分隔符,檔案可以直接用Excel開啟。CSV的規則簡單,便於程式輸出;Excel對CSV的相容性使得我們可以非常輕鬆的使用Excel提供的所有強大功能。

                唯一需要注意的地方就是CSV是使用英文逗號作為列分隔符的,所以當你輸出的文字中含有英文逗號時就會被CSV認為是列分隔符,從而使得檔案的現實格式與預想中的不同。因此,我們需要對內容進行轉義。

                網上可以得到的關於CSV的轉義大致可以總結為:

1.      如果一個單元內含有逗號,那麼用半形雙引號將內容包含,其中的逗號將不被識別為列分隔符;

2.      如果原內容中出現了半形雙引號,便是用兩個半形雙引號轉義。           

但是在實際操作中,就會發現如果某個單元內出現多個逗號,雙引號,我們的規則便不對了。例如:

test,ma, "ma, ""go"", ""go"",""go"""

我們希望的輸出格式是三列,但是Excel會顯示為六列。我們的轉義字元失效了。

 

test

 
 

 ma

 
 

 "ma

 
 

 ""go""

 
 

 ""go""

 
 

 ""go"""

 

之所以如此,通過我的分析,我認為CSV將每個逗號之間的內容作為首要參考標準。如果用逗號作分隔是可行的,那麼Excel將不會做任何更多的處理。

看一個更簡單的例子:

test,ma, "woshima, sldkl",

我們希望將其顯示為三列,但是結果卻是四列:

 

test

 
 

 ma

 
 

 "woshima

 
 

 sldkl"

 

由此可見,網上流傳的轉移規則並不完全。其根本原因在於,CSV只是一個技術規範,不同的程式對其有不同的支援;而且CSV本身的規範也是相當繁瑣。如果希望用程式去實現這樣的規範,那麼CSV的簡單性的優勢將不復存在。

好了,說到這裡,我們應該怎麼做呢? 我個人認為,最好的辦法就是規定一個特殊的字串作為英文逗號的轉義字元。

這樣就一了百了。