2012-02-09 1 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� 

Итак, как можно кодировать это? Thanks

+0

вы на 100% уверены, что открываете файл с помощью блокнота или блокнота ++ перед импортом показывает правильный символ, а не смешной символ выше? –

+0

открытие с помощью блокнота ++. Я получаю STATUA DELLA LIBERT · – markzzz

+0

, если символ не существует до того, как файл имеет неправильное кодирование и не связан с разбором CSV, а о том, чтобы вначале получить файл в правильном формате и кодировке. –

ответ

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

+0

Отредактировал мой ответ, чтобы использовать 'MyStreamReader.BaseStream' в качестве элемента' MyStreamReader' –

+0

Хорошо, попробовал с MyStreamReader.BaseStream! Проблема все еще происходит .. Я пробую другую кодировку .. – markzzz

1

Что происходит в вашем случае является то, что кодирование CSV и кодирование ваша страница (html) не соответствует ... вы либо убедитесь, что оба используют одну и ту же кодировку ИЛИ вы конвертируете кодировку CSV при чтении. Я не знаю, какой класс/библиотеки вы используете CsvFileReader но самый простой способ будет открыть CSV с правильной кодировкой, например, с StreamReader вместо ABSFilePath в качестве параметра ...

1

Вы используете нестандартные класс, я угадаю, что вы используете this one. Он плохо разработан, он не позволяет вам каким-либо образом изменить кодировку. Вам нужно добавить новый конструктор, чтобы это исправить:

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

Теперь вы можете получить его на что-то другое, чем просто UTF-8 читать. Лучше всего начать с Encoding.Default.