【问题标题】:Create Text File Without BOM创建没有 BOM 的文本文件
【发布时间】:2025-11-22 13:10:01
【问题描述】:

我试过this aproach没有任何成功

我正在使用的代码:

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

结果:

无论如何都是writing the BOM,以及特殊字符(如Æ Ø Å) 不正确:-/

我卡住了!

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

这是很难完成还是我的日子不好过?

非常感谢所有帮助,谢谢!

【问题讨论】:

  • "a file using UTF-8 as Encoding and 8859-1 as CharSet" : encoding 和 charset 是一回事,所以你的要求没有意义...

标签: c# asp.net-3.5 text-files byte-order-mark


【解决方案1】:

它会写 BOM,因为你在指示它在行中

Encoding utf8WithoutBom = new UTF8Encoding(true);

true 表示应该发出 BOM,使用

Encoding utf8WithoutBom = new UTF8Encoding(false);

不写入 BOM。

我的目标是使用 UTF-8 作为 Encoding 和 8859-1 作为 CharSet 创建一个文件

遗憾的是,无论您是否编写 UTF-8,这都是不可能的。 IE。只要您编写的字符出现在 ISO Latin-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 说 EMIT ... 我一直在读 OMIT 啊!!!我试过了: Encoding.GetEncoding("ISO-8859-1") 并且不写 BOM,但是关于特殊字符仍然有问题:(
  • @balexandre:我读过 Ømit。您忘记使 HttpResponse.Charset 属性与文件的编码相匹配。将它们都设置为 UTF-8 是个好主意。
  • @Thomas Levesque 我错误地投了反对票......(今天我的手点击了很多!而且......没有关于反对票的确认消息):-/我的错误!我很快就投票赞成 +1
  • @nobugz HttpResponse 与文件无关,文件已经写入,HttpResponse 只是发送给客户端的部分
  • @balexandre:确实如此,TransmitFile 将其作为响应的一部分。响应中的所有文本必须具有相同的编码。
最近更新 更多