2012-09-20 48 views
0

林雷丁一些的CSV文件。該文件是很容易的,因爲總是有剛「;」作爲分隔符,也沒有,或類似的東西閱讀文件之前,我必須檢查ANSI編碼嗎?

因此,它可以讀取該文件,一行行。 。和獨立琴絃那做工精細現在,人們告訴我:也許你應該檢查文件的編碼,它應該是始終ANSI,如果它不是,也許你的輸出將會有所不同,損壞的所以非ANSI文件應標明。不知何故

我剛纔說的,對吧但是如果我想想吧。!?難道我真的要爲您在這種情況下,編碼的文件我只是改變了文件的編碼的東西其他和我仍然能夠讀取文件沒有任何問題。我的代碼很簡單:

using (TextReader reader = new StreamReader(myFileStream)) 
{ 
    while ((line = read.ReadLine()) != null) 
    { 
    //read the line, spererate by ; and other stuff... 
    } 
} 

所以再次:我真的需要檢查文件的ANSI編碼嗎?有人能給我一個例子,我何時可能遇到麻煩,或者在閱讀非ansi文件後何時得到損壞的輸出?謝謝!

回答

2

也就是說的StreamReader特定構造將假定該數據是UTF-8;這是與ASCII兼容,但如果數據在128-255範圍內的單字節代碼頁使用的字節(你會得到字符串等錯誤的字符),或者可能失敗可能失敗完全(即拋出一個異常)如果數據實際上與UTF-7,UTF-32等非常不同,則可以使用字節順序標記來檢測編碼,但這是一種非常不同的方式,如UTF-7,UTF-32等圓形問題:在大多數情況下,如果你不已經知道編碼,你不能真正檢測編碼(穩健)。所以更好的方法是:首先了解編碼。然後你就可以在正確道編碼通過其他構造函數之一來使用。

下面是它失敗的例子:

// we'll write UTF-32, big-endian, without a byte-order-mark 
File.WriteAllText("my.txt", "Hello world", new UTF32Encoding(true, false)); 

using (var reader = new StreamReader("my.txt")) 
{ 
    string s = reader.ReadLine(); 
} 
相關問題