C# 创建没有BOM表的文本文件

C# 创建没有BOM表的文本文件,c#,asp.net-3.5,text-files,byte-order-mark,C#,Asp.net 3.5,Text Files,Byte Order Mark,我试过了,但没有成功 我正在使用的代码: // File name String filename = String.Format("{0:ddMMyyHHmm}", dtFileCreated); String filePath = Path.Combine(Server.MapPath("App_Data"), filename + ".txt"); // Process myObject pbs = new myObject(); pbs.Generate

我试过了,但没有成功

我正在使用的代码:

// File name
String filename = String.Format("{0:ddMMyyHHmm}", dtFileCreated);
String filePath = Path.Combine(Server.MapPath("App_Data"), filename + ".txt");

// Process       
myObject pbs = new myObject();         
pbs.GenerateFile();

// pbs.GeneratedFile is a StringBuilder object

// Save file
Encoding utf8WithoutBom = new UTF8Encoding(true);
TextWriter tw = new StreamWriter(filePath, false, utf8WithoutBom);
foreach (string s in pbs.GeneratedFile.ToArray()) 
    tw.WriteLine(s);
tw.Close();

// Push Generated File into Client
Response.Clear();
Response.ContentType = "application/vnd.text";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".txt");
Response.TransmitFile(filePath);
Response.End();
结果是:

不管是什么,还有特殊的角色(比如ÆØØ) 不正确:-/

我被卡住了

我的目标是创建一个文件,使用UTF-8作为编码,使用8859-1作为字符集

这很难完成,还是我今天过得不好


非常感谢您的帮助,谢谢

它写入BOM是因为您正在命令它

Encoding utf8WithoutBom = new UTF8Encoding(true);
true
表示应使用

Encoding utf8WithoutBom = new UTF8Encoding(false);
不写入BOM表


我的目标是创建一个文件,使用UTF-8作为编码,使用8859-1作为字符集

遗憾的是,这是不可能的,无论您是否编写UTF-8。也就是说,只要您正在书写的字符是ISO拉丁语-1,它看起来就像ISO 8859-1文件,但是,一旦您输出了ISO 8859-1未涵盖的字符(例如ä,ö,ü),这些字符将被写入多字节字符

要编写真正的ISO-8859-1,请使用:

Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
编辑:在balexandre的评论之后

我使用以下代码进行测试

var filePath = @"c:\temp\test.txt";
var sb = new StringBuilder();
sb.Append("dsfaskd jlsadfj laskjdflasjdf asdkfjalksjdf lkjdsfljas dddd jflasjdflkjasdlfkjasldfl asääääjdflkaslj d f");

Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");

TextWriter tw = new StreamWriter(filePath, false, isoLatin1Encoding);
tw.WriteLine(sb.ToString());
tw.Close();

而且这个文件看起来很好。显然,读取文件时应该使用相同的编码

MSDN说发射。。。我一直在读省略啊!!!我尝试了:Encoding.GetEncoding(“ISO-8859-1”)并且没有编写BOM表,但是在特殊字符方面仍然有问题:(@balexandre:I readØmit。您忘记了让HttpResponse.Charset属性与文件的编码匹配。将它们都设置为UTF-8是一个不错的主意。@Thomas Levesque我错误地投了反对票。。。(今天我手上的点击次数太多了!而且…没有关于向下投票的确认信息):-/但我错了!我很快就投了赞成票+1@nobugzHttpResponse与文件无关,文件已经写入,HttpResponse只是发送到客户端part@balexandre:是的,TransmitFile使其成为响应的一部分。响应中的所有文本必须具有相同的编码。“使用UTF-8作为编码和8859-1作为字符集的文件”:编码和字符集是一样的,所以您的要求没有意义。。。