C# 读取/写入POP3数据

C# 读取/写入POP3数据,c#,character-encoding,pop3,C#,Character Encoding,Pop3,我从POP3服务器接收数据,最初我使用StreamWriter将数据(作为文本)写入磁盘上的文件,但使用这种方法某些字符无法解码。如果我使用BinaryWriter和BinaryWriter.Write(Byte[])方法,一切都正常。据我所知,StreamWriter使用指定的编码写入文本字符(在整个过程中可以修改某些字节),BinaryWriter将原始字节写入文件,对吗 如果您有字节要开始,并希望将它们传输到文件中,我建议不要使用BinaryWriter或StreamWriter——只需使

我从POP3服务器接收数据,最初我使用StreamWriter将数据(作为文本)写入磁盘上的文件,但使用这种方法某些字符无法解码。如果我使用BinaryWriter和BinaryWriter.Write(Byte[])方法,一切都正常。据我所知,StreamWriter使用指定的编码写入文本字符(在整个过程中可以修改某些字节),BinaryWriter将原始字节写入文件,对吗

如果您有字节要开始,并希望将它们传输到文件中,我建议不要使用
BinaryWriter
StreamWriter
——只需使用
Stream
(例如
FileStream
)<代码>二进制编写器在您想将原语等写入流时非常有用,但如果您只想转储一个字节序列,
做您想做的一切。您当然不应该使用
StreamWriter
传输不透明的二进制内容;将文本视为文本,将二进制数据视为二进制数据,并且仅当您确定正在执行的操作(例如,二进制数据实际上是特定编码中的文本)时,才在两者之间进行转换。

您能否向我们展示如何打开指定编码的StreamWriter。我认为您应该在那里使用正确的编码,您现在使用的编码可能是错误的。

使用(StreamWriter writer=newstreamwriter(File.Open(path,FileMode.Create,FileAccess.Write)){…}问题是,当您能够解析POP3内容(正确的消息)时,首先知道编码。标题中描述了使用的编码。此外,消息的某些部分的编码可能不同。StreamWriter不适合将POP3消息写入磁盘。这是正确的,这就是为什么我对上面Jon Skeet的答案投了+1:)嗨。只是一个侧面的观察。在我看来,您正在用C#实现一个完整的POP3客户端和MIME解析器。我可以问你为什么不使用一些免费的吗?我对此感兴趣,因为我目前正在维护一个。