Почему .Net ContentDisposition неправильно кодирует это имя файла?C#

Место общения программистов C#
Ответить
Anonymous
 Почему .Net ContentDisposition неправильно кодирует это имя файла?

Сообщение Anonymous »

Это очень узкое событие, которое произошло один раз из более чем 10 000 отправленных имен файлов. Однако следующий код генерирует нечто похожее на недопустимое ContentDisposition:

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

    var fileName = "AAA_AAAAAAAAA AAAAA (AAAA – AAAA &  – )";
var cd = new ContentDisposition{
FileName = fileName
};

Console.WriteLine(cd.ToString());
Это тире (U+2013), а не дефисы. Результат (который включает \n и состоит из двух строк) -

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

attachment; filename="=?utf-8?B?QUFBX0FBQUFBQUFBQSBBQUFBQSAoQUFBQSDigJMgQUFBQSAmICDigJMg?=
=?utf-8?B?KQ==?="
Я сократил имя файла до наименьшего варианта использования, который смог найти. Что странно, так это то, что измените любой символ, и результат будет действительным — например, удалите первую A, и вы получите

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

attachment; filename="=?utf-8?B?QUFfQUFBQUFBQUFBIEFBQUFBIChBQUFBIOKAkyBBQUFBICYgIOKAkyAp?="
Мне любопытно, почему фреймворк делает это неправильно? Все остальные имена файлов умещаются в одну строку, поэтому я не уверен, что в этом особенного.
(Конкретная проблема, которую я вижу — сохранение ContentDisposition хранится как тег в файловом хранилище Azure, и когда он создается таким образом в двух строках, это вызывает ошибку.)

Подробнее здесь: https://stackoverflow.com/questions/791 ... ncorrectly
Ответить

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

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

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

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

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