На нашем сайте есть файлы на нескольких языках - французском, испанском, португальском и английском. Когда пользователь загружает файл, содержащий специальные символы, такие как ó или ç или ã и т. Д., Я получаю сообщение об ошибке, когда я возвращаю File(data, "application/octet-stream", name);
в MVC, я получаю исключение:
System.FormatException: An invalid character was found in the mail header.
Я нашел статью в MSDN, в которой показано, как установить для почтового сообщения кодировку UTF-8, чтобы избежать этого. Но я не знаю, как в кодировке UTF-8 имя файла при использовании файла MVC actionresult. Я нашел в сети статью, в которой UTF-8 кодирует строку, но когда я пытаюсь ее использовать, я получаю имя мусора, так что, думаю, я не понимаю, что кодировка UTF-8 должна делать со строкой. Вот пример кода, найденного в этом сообщении: В заголовке письма обнаружен недопустимый символ
public static string GetCleanedFileName(string s)
{
char[] chars = s.ToCharArray();
var sb = new StringBuilder();
for (int index = 0; index < chars.Length; index++)
{
string encodedString = EncodeChar(chars[index]);
sb.Append(encodedString);
}
return sb.ToString();
}
private static string EncodeChar(char chr)
{
var encoding = new UTF8Encoding();
var sb = new StringBuilder();
byte[] bytes = encoding.GetBytes(chr.ToString());
for (int index = 0; index < bytes.Length; index++)
{
sb.AppendFormat("%{0}", Convert.ToString(bytes[index], 16));
}
return sb.ToString();
}