2012-03-02 4 views
1

Я использую следующий код для генерации CSV-файла из таблицы журналов.csv кодировка файлов для кириллических символов

public ActionResult Index() 
{ 
var records = loggingService.GetLogRecords(model.Since, model.For); 

var mainSb = new StringBuilder(); 
mainSb.Append("Date,User name\n"); 

foreach (var logRecord in records) 
{ 
    mainSb.Append(logRecord.Time.ToString("dd/MM/yyyy hh:mm:ss")).Append(","); 
    mainSb.Append("\"").Append(logRecord.UserName ?? "").Append("\"").Append(","); 
} 
return File(Encoding.Unicode.GetBytes(mainSb.ToString()), "text/csv", string.Format("logs.csv")); 
} 

Usernames содержит кириллические символы, и когда я открываю файл в формате CSV - кириллические символы плохо отображается. Я также пытался использовать кодировки UTF8 и UTF32. Какую кодировку следует использовать или какие изменения следует делать?

ответ

12

Вы можете использовать UTF-8 с преамбулой. Попробуйте, как это в конце:

var data = Encoding.UTF8.GetBytes(mainSb.ToString()); 
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray(); 
return File(result, "text/csv", "logs.csv"); 

Также Вы, кажется, использует \n, который не является правильным новый разделитель строки на Windows, и, кажется, не быть добавления новых строк в цикле Еогеасп, так что все будет быть на той же строке, что приводит к недопустимому CSV-файлу. Пожалуйста, пожалуйста, пожалуйста, do not roll your own CSV parser.

+0

Для кодирования строки я удаляю из них символы «,» и «». Достаточно ли этого? И могут ли помощники, с которыми вы связывались в ответ, сгенерировать (не разобрать) .csv-файл? –

+0

Отличный ответ, спасибо, что упомянул об этом Я просто использовал его для того, чтобы работать с скандинавскими персонажами. – MEMark

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