StreamWriter错误的字符

有一个问题,节流器在我正在制作的csv中产生错误的字符。 字符只出现在文件的开头:

5,"GEN",555555555,,"Evan","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com" 5,"GEN",555555555,,"Dorathy","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com" 5,"GEN",555555555,,"Marvin","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com" .... 

看起来像编码问题。 我已经尝试了不同的编码和正则表达式来清理字符串运气不好。 这是预览代码(尽管它并不复杂)。 它也作为一个Web进程运行。

 string fileName = includeEmail == false ? "attachment; filename=stuacct_batch.txt" : "attachment; filename=rentals.csv"; Context.Response.Clear(); Context.Response.AddHeader("content-disposition", fileName); Context.Response.ContentType = includeEmail == false ? "text/plain" : "text/csv"; using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.UTF8)) { string line = ""; foreach (Student s in students) { // ... some logic above that that's misc. to this problem line = "5,\"GEN\"," + s.StudentNumber + ",,\"" + s.FirstName + "\",\"" + s.LastName + "\",,,,,,,,,,,,,,,,,,,,,,,,,\"" + s.Email + "\""; sw.WriteLine(line); } } Context.Response.End(); Context.Response.Flush(); Context.ApplicationInstance.CompleteRequest(); 

您已指定要对流使用UTF-8编码,并且这些初始字节是有效的UTF-8字节顺序标记(BOM)。 问题显然是您的查看器/编辑器没有正确解码UTF-8流。 如果只有BOM是问题,并且您想要创建没有BOM的流,则可以创建自己的UTF8Encoding类实例:

 var encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); using (StreamWriter sw = new StreamWriter(Response.OutputStream, encoding)) ... 

如果您真的想使用ASCII数据,则应使用该编码:

 using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.ASCII)) ... 

那些可能是字符指定文件是unicode,而不是ansi。

您是否在文本编辑器中将文件作为ANSI文件打开? 如果是这样,那就是你看到角色的原因。 尝试将其打开为unicode,或将您的编码设置为unicode。