Creare file di testo senza BOM
-
21-09-2019 - |
Domanda
questo aproach senza alcun successo
Il codice che sto utilizzando:
// 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();
il risultato:
E ' scrivere la distinta non importa cosa, e caratteri speciali (come Æ Ø Å ) non sono corrette: - /
Sono bloccato!
Il mio obiettivo è di creare un file utilizzando UTF-8 , come la codifica e la 8859-1 come CharSet
è così difficile da realizzare o sto solo una brutta giornata?
Ogni aiuto è molto apprezzato, grazie!
Soluzione
Beh, scrive il BOM perché si sta perché metta, nella linea
Encoding utf8WithoutBom = new UTF8Encoding(true);
true
significa che la distinta deve essere emessa, utilizzando
Encoding utf8WithoutBom = new UTF8Encoding(false);
scrive senza BOM.
Il mio obiettivo è quello di creare un file usando UTF-8 come codifica e 8859-1 come CharSet
Purtroppo, questo non è possibile, o si scrivere UTF-8 o meno. Cioè fino a quando i personaggi si sta scrivendo sono presenti in ISO Latin-1 che sarà simile a un file ISO 8859-1, ma non appena si uscita un personaggio che non è coperto da ISO 8859-1 (ad esempio ä, ö, ü ) questi personaggi saranno scritti come un carattere multibyte.
Per scrivere vero uso ISO-8859-1:
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
Modifica Dopo il commento di balexandre
Ho usato il seguente codice per il test ...
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();
E il file sembra perfettamente bene. Ovviamente, si dovrebbe usare la stessa codifica durante la lettura del file .