Почему .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

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