2012-06-18 3 views
1

У меня проблема с символами в файле csv, проходящем через черный алмаз с? в середине.Адаптация чтения csv для чтения символов Unicode

Я написал код для синтаксического анализа csv, но я не понимаю, почему строка не читает символы юникода. Вероятно, это связано с моей реализацией:

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? Может быть, это что-то другое. Latin1 или что-то в этом роде. Проблема с кодировками заключается в том, что вы * имеете *, чтобы знать, что это такое, поскольку его невозможно обнаружить должным образом. – mfussenegger

+0

Спасибо, я думаю, что это было что-то вроде Encoding.GetEncoding (1212) – ediblecode

Смежные вопросы