【发布时间】:2011-01-21 16:03:56
【问题描述】:
我将读取和解析 Microsoft SMTP 服务丢弃的 EML 文件。我是使用各种流类的新手。我看到的解析这些文件的实现使用 System.IO.Stream 的变体来逐字节读取。但是,这些文件似乎永远不应该是文本。使用 StreamReader 不是更好吗?如果是这样,是否有任何理由使用默认 (UTF-8) 编码以外的其他编码?
【问题讨论】:
标签: .net smtp stream streamreader eml
我将读取和解析 Microsoft SMTP 服务丢弃的 EML 文件。我是使用各种流类的新手。我看到的解析这些文件的实现使用 System.IO.Stream 的变体来逐字节读取。但是,这些文件似乎永远不应该是文本。使用 StreamReader 不是更好吗?如果是这样,是否有任何理由使用默认 (UTF-8) 编码以外的其他编码?
【问题讨论】:
标签: .net smtp stream streamreader eml
它们应该是文本,但并非总是如此。
电子邮件可以是 8 位或二进制编码的。
StreamReader 将适用于您要解析的大约 99% 的电子邮件。
不过,老实说,这还不是最大的问题。
问题实际上是根据 Mime 规则解析和提取 Mime 内容,以及使用正确的字符集。
虽然 UTF-8 是一个非常大的字符集,并且可以用于解析大多数电子邮件,但您仍然可以通过尝试使用该字符集解析电子邮件来获取损坏的内容。
执行此操作的最佳方法是实际阅读二进制形式的电子邮件,提取字符集,然后切换到使用在标题中找到的指定字符集阅读电子邮件。
【讨论】: