为什么我的StreamWriter Response输出在Excel中产生垃圾口音,但在记事本中看起来不错?

我正在使用来自另一个堆栈溢出问题的技术将CSV文件写入用户打开/保存的Response输出。 在记事本中该文件看起来不错,但是当我在Excel中打开它时,重音字符是垃圾。 我认为这是与字符编码有关,所以我尝试手动将其设置为UTF-8( StreamWriter的默认值)。 这里是代码:

 // This fills a list to enumerate - each record is one CSV line List<FullRegistrationInfo> fullUsers = GetFullUserRegistrations(); context.Response.Clear(); context.Response.AddHeader("content-disposition", "attachment; filename=registros.csv"); context.Response.ContentType = "text/csv"; context.Response.Charset = "utf-8"; using (StreamWriter writer = new StreamWriter(context.Response.OutputStream)) { for (int i = 0; i < fullUsers.Count(); i++) { // Get the record to process FullRegistrationInfo record = fullUsers[i]; // If it's the first record then write header if (i == 0) writer.WriteLine(Encoding.UTF8.GetString( Encoding.UTF8.GetPreamble()) + "User, First Name, Surname"); writer.WriteLine(record.User + "," + record.FirstName + "," + record.Surname); } } context.Response.End(); 

任何想法,我需要做的正确编码的文件,所以Excel可以查看重音字符?

您可能需要在输出的开始处编写一个名为Byte-order Mark的UTF-8指示器,以通知Excel有关UTF-8的内容。 愚蠢的Excel。