Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误字符_C# - Fatal编程技术网

C# 错误字符

C# 错误字符,c#,C#,streamwriter在我正在生成的csv中生成错误字符时出现问题。字符ï»仅出现在文件的开头: 5,"GEN",555555555,,"Evan","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com" 5,"GEN",555555555,,"Dorathy","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com" 5,"GEN",555555555,,"Marvin","Smith

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();

这些可能是表示文件是unicode而不是ansi的字符


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

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

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

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

有关更多信息,这些字节是UTF-8 BOM字节。它们不会显示在理解BoM表的文本编辑器中@Lynn不幸的是,客户端将文件加载到另一个程序中。我打电话给开发人员,不知道他们软件的编码。有趣的是,OpenOffice将显示字符,但不会显示带有或不带BOM的记事本++字符。也许我可以捕获BOM字节?不需要捕获它们;根据Martin下面的回答,将StreamWriter更改为输出ASCII而不是UTF,这样您就不会再看到它们了。
using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.ASCII)) ...