Я пытаюсь реализовать простой импорт данных в мое приложение MVC из CSV-файла.Как предотвратить excel от изменения кодировки csv-файла после сохранения?
Чтобы удалить необходимость сохранения файла CSV-файла на своем компьютере и из-за проблемы с его получением, я создал кнопку в моей форме, которая генерирует шаблон.
сгенерировать строку из моей модели объекта в классе писателя:
this.Writer.GetCswTemplate()
возвращает строку из ViewModel (т.е. COLUMN1; colum2 \ г \ п)
По How to GetBytes() in C# with UTF8 encoding with BOM?
I force excel для открытия CSV-файла с кодировкой UTF-8:
var templateResult = Encoding.UTF8.GetBytes(this.Writer.GetCswTemplate());
var preamble = Encoding.UTF8.GetPreamble();
var templateBytes = preamble.Concat(templateResult).ToArray();
отправить сгенерированный шаблон для пользователя я использую MVC (File) помощника:
return this.File(templateBytes, "application/csv", "filename.csv");
Он отлично работает, он генерирует шаблон, возвращает его пользователю, открывает его с Excel и показывает все специальные символы в нем. Если я открою сгенерированный файл в Notepad ++, я вижу, что это кодировка UTF-8.
Проблема возникает, когда пользователь заполняет сгенерированный шаблон и сохраняет его в Excel. По какой-то причине Excel решает изменить кодировку файлов в ANSI.
Есть ли способ предотвратить это? Я что-то пропустил (добавьте какой-то заголовок или что-то еще)?
Интересно, если я создаю шаблон с UTF-8 (без спецификации), измените указанный файл в excel и сохраните его, Excel не изменит свою кодировку в ANSI. Проблема в том, что Excel не распознает специальные символы внутри шаблона.
Этот вопрос не имеет ничего общего ни с C#, ни с asp.net MVC. – ataravati
Я не согласен, что это дублированный вопрос. Я все еще верю, что должен быть способ заставить excel не изменять кодировку, поскольку она не меняет его, когда он установлен как UTF-8 без спецификации. Если я не найду способ сделать это, я, вероятно, пойду так, как предложил Chriss в комментарии ответа, и будет проверять кодировку импорта файлов или выходить из csv complete и просто использовать excel it self. Если это произойдет, я буду принимать вопрос как дубликат. –