2010-03-23 6 views
26

Ich versuchte this aproach ohne Erfolgerstellen Textdatei ohne BOM

der Code Ich verwende:

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

das Ergebnis:

enter image description here

Es ist writing the BOM egal was, und Sonderzeichen (wie Æ Ø Å) sind nicht korrekt: -/

Ich stecke fest!

Mein Ziel ist es, eine Datei erstellen mit UTF-8 als Encoding und 8859-1 als CharSet

Ist das so schwer zu erreichen oder ich nur einen schlechten Tag zu bekommen?

Alle Hilfe wird sehr geschätzt, danke!

+4

"eine Datei mit UTF-8 als Encoding und 8859-1 als CharSet": Codierung und Zeichensatz sind das gleiche, so dass Ihre Anforderung keinen Sinn ergibt ... –

Antwort

69

Nun schreibt er die BOM, weil Sie es zu, in der Linie

Encoding utf8WithoutBom = new UTF8Encoding(true); 

true bedeutet, dass die BOM emittiert werden sollen, werden anweist, mit

Encoding utf8WithoutBom = new UTF8Encoding(false); 

keine BOM schreibt.

Mein Ziel eine Datei ist erstellen mit UTF-8 als Kodierung und 8859-1 als CharSet

Leider ist dies nicht möglich, entweder schreiben Sie UTF-8 oder nicht. I.e. Solange die Zeichen, die Sie schreiben, in ISO Latin-1 vorhanden sind, sehen sie wie eine ISO 8859-1-Datei aus, sobald Sie jedoch ein Zeichen ausgeben, das nicht von ISO 8859-1 abgedeckt wird (z. B. ä, ö, ü) Diese Zeichen werden als Multibyte-Zeichen geschrieben.

Um echte ISO-8859-1 Verwendung zu schreiben:

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

Edit: Nach balexandre Kommentar

ich zum Testen Sie den folgenden Code verwendet ...

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

Und Die Datei sieht sehr gut aus. Offensichtlich, sollten Sie die gleiche Codierung beim Lesen der Datei verwenden.

+1

MSDN sagt EMIT ... und ich las weiter OMIT arghh !!! Ich habe versucht: Encoding.GetEncoding ("ISO-8859-1") und schreibt nicht die Stückliste, habe aber immer noch Probleme in Bezug auf spezielle Zeichen :( – balexandre

+0

Ich frage mich, warum diese vollkommen gültige Antwort wurde abgelehnt ... –

+0

@balexandre: siehe bearbeiten ... – AxelEckenberger

Verwandte Themen