我试过这个方法没有任何成功
我正在使用的代码:
// 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();
Run Code Online (Sandbox Code Playgroud)
结果:

无论如何都在编写BOM,特殊字符(如ÆØÅ)不正确: - / …
我在使用Visual Studio 2010比较C#4.0中的单元测试中的字符串时遇到问题.同样的测试用例在Visual Studio 2008中正常工作(使用C#3.5).
这是相关的代码段:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
在调试此测试时,该data字符串在肉眼看来包含与文字完全相同的字符串.当我打电话data.ToCharArray()时,我注意到该字符串的第一个字节data是价值65279这是UTF-8字节顺序标记.我不明白的是为什么要Encoding.UTF8.GetString()保持这个字节.
如何获取Encoding.UTF8.GetString()到不把字节顺序标记得到的字符串中?
更新:问题在于GetData(),它从磁盘读取文件,使用从文件中读取数据FileStream.readbytes().我通过使用a StreamReader并使用字符串将字符串转换为字节来纠正这个问题Encoding.UTF8.GetBytes(),这应该是它本来应该做的事情!谢谢你的帮助.