Создать текстовый файл без спецификации - PullRequest
47 голосов
/ 23 марта 2010

Я пытался этот подход безуспешно

код, который я использую:

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

результат:

enter image description here

Это написание спецификации , несмотря ни на что, и специальные символы (например, Æ Ø Å) не верны: - /

Я застрял!

Моя цель - создать файл, используя UTF-8 в качестве кодировки и 8859-1 в качестве CharSet

Это так сложно сделать, или у меня просто плохой день?

Вся помощь очень ценится, спасибо!

1 Ответ

114 голосов
/ 23 марта 2010

Ну, это записывает спецификацию, потому что вы указываете это в строке

Encoding utf8WithoutBom = new UTF8Encoding(true);

true означает, что спецификация должна быть выдана, используя

Encoding utf8WithoutBom = new UTF8Encoding(false);

пишет нет спецификации.

Моя цель - создать файл с использованием 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");

Редактировать: После комментария Балександра

Я использовал следующий код для тестирования ...

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

И файл выглядит отлично. Очевидно, вы должны использовать ту же кодировку при чтении файла .

...