我试图此形式给出没有任何成功

我使用的代码:

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

结果:

“在这里输入的图像描述”

这是写BOM 不管是什么,以及特殊字符(如ÆØÅ ) 不正确: - /

我卡住了!

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

这是如此难以完成或者我刚开始一个糟糕的一天?

所有的帮助感激,谢谢!

有帮助吗?

解决方案

那么它写入BOM,因为你是它指示到,在该行

Encoding utf8WithoutBom = new UTF8Encoding(true);

true装置,所述BOM应该发射,使用

Encoding utf8WithoutBom = new UTF8Encoding(false);

写入没有BOM。

  

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

不幸的是,这是不可能的,或者你写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();

和文件看起来非常清楚。显然,您应该读取文件时使用相同的编码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top