2012-02-09 71 views
1

我有這樣的代碼:如何編碼CSV文件導入?

string ABSfilePath = ""; 

CsvFileReader reader = null; 
ABSfilePath = Server.MapPath("/myfile.csv"); 

try 
{ 
    reader = new CsvFileReader(ABSfilePath); 

    CsvRow myRow = new CsvRow(); 
    while (reader.ReadRow(myRow)) 
    { 
     Response.Write(myRow[0].ToString()+"<br />"); 
    } 
} 
catch (Exception err) 
{ 
    Response.Write(err.Message); 
} 
finally 
{ 
    if (reader != null) 
     reader.Dispose(); 
} 

但是當我試圖導入我的文件myfile.csv,一些字符是 「uncorrectly」 編碼,如:

STATUA DELLA LIBERT� 

那麼,怎樣才能編碼呢?謝謝

+0

你是否100%確定在導入之前用記事本或記事本++打開文件顯示正確的字符而不是上面的有趣符號? – 2012-02-09 09:44:17

+0

用記事本++打開我得到STATUA DELLA LIBERT· – markzzz 2012-02-09 09:46:01

+0

如果字符不存在之前那麼文件有錯誤的編碼,並且不是關於CSV解析,而是關於首先獲取正確格式和編碼的文件。 – 2012-02-09 09:47:03

回答

2
reader = new CsvFileReader(ABSfilePath); 

是罪魁禍首。你應該先打開與正確的編碼一個StreamReader(我懷疑UTF-8),

StreamReader MyStreamReader = new StreamReader(ABSfilePath, System.Text.Encoding.WhateverYouNeed); 

然後做

reader = new CsvFileReader(MyStreamReader.BaseStream); 
+0

我不能! CsvFileReader獲取流,而不是StreamReader ... – markzzz 2012-02-09 10:00:16

+0

編輯我的答案使用'MyStreamReader.BaseStream'而不是'MyStreamReader' – 2012-02-09 10:05:07

+0

好吧,用MyStreamReader.BaseStream嘗試!問題仍然發生..我嘗試一些其他的編碼.. – markzzz 2012-02-09 10:06:14

1

你的情況會發生什麼事是,CSV的編碼和編碼你的頁面(html)不匹配......你要麼確保兩者都使用相同的編碼,要麼你在讀取時轉換CSV的編碼。我不知道你用CsvFileReader哪個類/庫,但最簡單的方法是用正確的編碼,例如用StreamReader,而不是作爲ABSFilePath參數打開CSV ...

1

您使用的是非標準上課,我猜你會用this one。它的設計不好,它不會讓你以任何方式改變編碼。你需要添加一個新的構造函數來解決這個問題:

public CsvFileWriter(string filename, Encoding encoding) 
     : base(filename, encoding) 
    { 
    } 

現在你可以得到它的閱讀不僅僅是UTF-8別的東西。最好的一個是Encoding.Default。