2012-06-18 68 views
1

我遇到一個csv文件中的字符問題,通過黑鑽與一個?在中間。適應csv閱讀器讀取unicode字符

我已經編寫了解析csv的代碼,但我不明白爲什麼字符串沒有正確讀取unicode字符。這可能與我的實現有關:

StreamReader readFile = new StreamReader(path) 

try { 
    while ((line = readFile.ReadLine()) != null) { 
    string[] row = { "", "", "" }; 
    int currentItem = 0; 
    bool inQuotes = false; 
    if (skippedFirst && currentItem != 3) { 
     for (int i = 0; i < line.Length; i++) { 
     if (!inQuotes) { 
      if (line[i] == '\"') 
      inQuotes = true; 
      else { 
      if (line[i] == ',') 
       currentItem++; 
      else 
       row[currentItem] += line[i]; 
      } 
     } else { 
      if (line[i] == '\"') 
      inQuotes = false; 
      else 
      row[currentItem] += line[i]; 
     } 
     } 
     parsedFile.Add(row); 
    } 
    skippedFirst = true; 
    } 
+1

如果'readFile'是'StreamReader',你可以使用與編碼部分的構造:'Encoding.UTF8 '。 –

+0

顯示'readFile'的創建。 – leppie

+0

@ Trustme-I'maDoctor把它作爲答案!這有助於出色 – ediblecode

回答

4

打開文件時指定編碼。

using (var sr = new StreamReader(@"c:\Temp\csvfile.csv", Encoding.UTF8)) { 
} 

你也可能想看看Filehelpers爲CSV解析:

http://www.filehelpers.com/quick_start.html

+0

沒有工作。 ReadLine()仍然給出 字符 – ediblecode

+1

你確定csv是utf8編碼的嗎?也許這是不同的。拉丁語1或類似的東西。編碼問題是你*知道它是什麼,因爲它不可能正確地檢測到它。 – mfussenegger

+0

謝謝,我認爲這是像Encoding.GetEncoding(1212) – ediblecode