Мы сталкиваемся с некоторыми проблемами с кодированием, особенно при использовании 8 бит в качестве кодирования передачи контента. Прежде всего, может ли кто-нибудь рассказать мне, как выглядит 8-битное кодированное значение a-umlaut?Кодирование содержимого с использованием MimeKit/MailKit
Что лучше всего применять для кодирования?
Я попытался использовать метод MIME WriteTo()
для записи содержимого в поток, который работает в любых случаях, кроме 8-битного кодирования.
UPDATE: В настоящее время, используя код, как писал в одном из примеров MimeKit:
using (MemoryStream memStm = new MemoryStream())
{
mime.WriteTo(memStm);
message.MimeMessage = Encoding.UTF8.GetString(memStm.ToArray());
}
Но, похоже, какой-то двойной кодировки, когда мой MIME содержит специальные символы, такие как: ÄÂ приведет в чем-то вроде: ¿½
Как я могу избежать этих ситуаций двойного кодирования?
Почему вы преобразовываете двоичные данные в строку? Содержимое, которое выводит MimeMessage.WriteTo(), никогда не должно быть преобразовано в строку для любого предполагаемого варианта использования. MimeMessage может иметь текст в нескольких кодировках во всех сообщениях, поэтому преобразование с использованием одной кодировки кодировки не может надежно работать. – jstedfast
Мне нужен он Мим в качестве струны. message.MimeMessage - это просто свойство строки. Раньше я использовал mime.ToString() (mime - typeof MimeMessage API MailKit, извините за недоразумение), но у tostring есть проблемы с датскими символами, такими как æøå, поэтому я использую WriteTo(). Итак, у меня есть тип MailKit.MimeMessage, из которого я хочу строку, которую я могу отправить моему клиенту и представить как .mht-файл в моем IE. – grmihel
Вы не можете использовать строку для этого, вам нужно использовать байт []. MIME - сложный документ, в котором каждый раздел может иметь свою собственную кодировку. Невозможно преобразовать составной документ с несколькими кодировками в строку с использованием одного конвертера кодировки. – jstedfast