0

我们遇到了一些编码问题,特别是在使用 8bit 作为内容传输编码时。首先,谁能告诉我a-umlaut的8位编码值是什么样的?

处理编码的最佳实践是什么?

我尝试使用WriteTo()MIME 实体的方法,将内容写入流中,该流在除 8 位编码之外的任何情况下都有效。

更新:目前使用 MimeKit 示例之一中发布的代码:

using (MemoryStream memStm = new MemoryStream())
{
    mime.WriteTo(memStm);
    message.MimeMessage = Encoding.UTF8.GetString(memStm.ToArray());
}

但是当我的 MIME 包含特殊字符时,它似乎是某种双重编码:äÄ 会导致类似:¿½

我怎样才能摆脱那些双重编码的情况?

4

1 回答 1

2

8 位 MIME 传输编码基本上是“无编码”,因此任何用 8 位编码编码的 MIME 数据都与给定 charset中数据的二进制表示相同。例如,'ä' 在 UTF-8 中表示为以下字节序列:0xC3, 0xA4. 使用 8 位时,您的 MIME 数据将是完全相同的字节序列。其他传输编码喜欢quoted-printablebase64将以不同方式对这些字节进行编码,例如w6Q==C3=A4

要点是MIME 字符集指定了字符如何以二进制形式表示,而MIME 内容传输编码指定了这些字节如何在 MIME 文档本身中进行编码。

至于最佳实践,现代电子邮件服务器和客户端将愉快地处理 8 位编码的电子邮件。尽管如此,习惯还是使用quoted-printableor base64

至于双编码问题,äÄ双 UTF-8 编码的序列看起来与 不同¿½,所以我认为那里还有其他问题。我不熟悉 MimeKit 并且您的代码示例不包含足够的信息,但是如果您使用更完整的重现代码更新您的问题,我将很乐意更新我的答案。

于 2015-05-13T09:04:59.787 回答