我试了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 创建为CharSet
这难以实现,或者我只是度过了糟糕的一天?
非常感谢所有帮助,谢谢!
答案 0 :(得分:110)
好吧,它写了BOM,因为你在
行指示它Encoding utf8WithoutBom = new UTF8Encoding(true);
true
表示应使用
Encoding utf8WithoutBom = new UTF8Encoding(false);
没有写BOM。
我的目标是使用UTF-8创建一个文件作为编码,将8859-1创建为CharSet
可悲的是,无论你是否写过UTF-8,这都是不可能的。即只要您正在编写的字符出现在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();
该文件看起来非常好。显然,在阅读文件时应使用相同的编码。