Crear Archivo De Texto Sin BOM


Probé este enfoque sin ningún éxito

El código que estoy usando:

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

El resultado:

introduzca la descripción de la imagen aquí

Es escribir la lista de materiales no importa qué, y caracteres especiales (como Æ Ø Å) no son correctos: - /

Estoy atascado!

Mi objetivo es crear un archivo usando UTF-8 como Codificación y 8859-1 como CharSet

¿Es esto tan difícil de lograr o simplemente estoy teniendo un mal día?

Toda la ayuda es muy apreciado, gracias!

Author: Community, 2010-03-23

1 answers

Bueno, escribe la lista de materiales porque usted está instruyendo a, en la línea

Encoding utf8WithoutBom = new UTF8Encoding(true);

true significa que la lista de materiales debe emitirse, utilizando

Encoding utf8WithoutBom = new UTF8Encoding(false);

No escribe ninguna lista de materiales.

Mi objetivo es crear un archivo usando UTF-8 como codificación y 8859-1 como CharSet

Lamentablemente, esto no es posible, ya sea que escriba UTF-8 o no. Es decir, siempre y cuando los caracteres que está escribiendo están presentes en ISO Latin-1 se verá como un archivo ISO 8859-1, sin embargo, tan pronto como carácter que no está cubierto por ISO 8859-1 (por ejemplo,ä, ö, ü) estos caracteres se escribirán como un carácter multibyte.

Para escribir verdadero ISO-8859-1 use:

Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");

Editar: Después del comentario de balexandre

Usé el siguiente código para probar ...

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

Y el archivo se ve perfectamente bien. Obviamente, debe usar la misma codificación al leer el archivo.

 87
Author: AxelEckenberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 17:23:29