Создание текстового файла без BOM
пробовал этот подход без какого-либо успеха
код, который я использую:
// 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();
результат:
Это написание спецификаций независимо от того, что, и специальные символы (например, Æ Ø Å) не правильно :-/
я застрял!
моя цель-создать файл с помощью UTF-8 как кодирование и 8859-1 как CharSet
это так трудно добиться, или у меня просто плохой день?
вся помощь очень ценится, спасибо!
1 ответов
Ну, он пишет BOM, потому что вы инструктируете его, в строке
Encoding utf8WithoutBom = new UTF8Encoding(true);
true
означает, что спецификация должна быть испущена, используя
Encoding utf8WithoutBom = new UTF8Encoding(false);
не пишет никаких спецификаций.
моя цель-создать файл, используя UTF-8 в качестве кодировки и 8859-1 в качестве кодировки
к сожалению, это невозможно, либо вы пишете UTF-8 или нет. Т. е. пока символы, которые вы пишете, присутствуют в ISO Latin-1, он будет выглядеть как ISO 8859-1 файл, однако, как только вы выведете символ, который не охвачен ISO 8859-1 (например,ä, ö, ü), эти символы будут записаны как многобайтовый символ.
для записи true ISO-8859-1 Используйте:
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
Edit: после комментария 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();
и файл выглядит отлично. Очевидно,вы должны использовать ту же кодировку при чтении файл.