Сохранение файла с длинным именем и символами UTF-8 в ASP.NET MVC приводит к тому, что он содержит «%0d%0a».C#

Место общения программистов C#
Ответить
Anonymous
 Сохранение файла с длинным именем и символами UTF-8 в ASP.NET MVC приводит к тому, что он содержит «%0d%0a».

Сообщение Anonymous »

В приложении ASP.NET MVC у меня есть действие, которое экспортирует данные в файлы CSV. Код выглядит следующим образом:

Код: Выделить всё

public ActionResult CSV(int id)
{
var model = GetRaportData(id); // Gets the data that will be exported
var cd = new System.Net.Mime.ContentDisposition
{
FileName = model.Raport.Name + ".csv",
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
// The contents of the CSV file are rendered via a view
var csv = ViewToString.RenderRazorViewToString(ControllerContext, "_CSV", model);
// To make the CSV file compatible with encoding in Excel
// the file is reencoded in Ansi 1250
return File(csv.ToAnsi1250(), "text/plain");
}
Я предполагаю, что проблема связана с этим фрагментом кода:

Код: Выделить всё

var cd = new System.Net.Mime.ContentDisposition
{
FileName = model.Raport.Name + ".csv",
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
Каждый раз, когда я пытаюсь сохранить файл, имя которого содержит символы UTF-8 (а именно польские символы) и имя файла имеет определенную длину (или более), эта строка «%0d%0a» в какой-то момент отображается в имени сохраненного файла.
Например:

Ę У этого файла очень длинное имя Lorem Ipsum Lorem Ipsum.csv

становится

Ę У этого файла очень длинное имя Lorem Ip%0d%0a sum Lorem Ipsum.csv

Похоже, не имеет значения, где находится символ UTF-8, какой это символ или сколько их. там.
Если в имени нет символов UTF-8 или имя относительно короткое, «%0d%0a» не появится в имени сохраненного файла.
Кто-нибудь знает, почему это происходит и\или как это исправить?
Изменить: если я назову свой файл:

ABУ этого файла очень длинное имя Lorem Ipsum Lorem Ipsum.csv

Проблемы не возникнет.
Я мог бы удалить символы UTF-8, заменив их базовыми латинскими символами, но я скорее попробую исправить проблему, чем использовать обходной путь.
Как предложил Рикардо Момм, я протестировал проблему в другом браузере (описание выше описывает, как это выглядело в FireFox). В Chrome файлы, в имя которых в FireFox будет добавлено "%0d%0a", просто переименовываются в "16" без расширения.
Изменить: "16" взято из URL-адреса, ведущего к файлу (что-то вроде http://someaddress/CSV/16), поэтому кажется, что Chrome полностью игнорировал это имя.

Подробнее здесь: https://stackoverflow.com/questions/218 ... it-contain
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»