Laden...

CSV Export als UTF-8 ohne BOM

Letzter Beitrag vor 15 Jahren 5 Posts 4.987 Views
CSV Export als UTF-8 ohne BOM

Hi

Ich habe ein kleines Problem mit der Enkodierung eines CSV als UTF-8 ohne BOM. Ausgangslage ist ein Usercontrol in Umbraco, welches Member als CSV exportieren soll. Das funktioniert auch soweit gut.

Nur... sobald ich das File im Excel öffne, werden die Umlaute falsch dargestellt (ä ü etc.). Das exportierte File wird vom Usercontrol im UTF-8 mit BOM Format exportiert. Ich bräuchte aber die Variante ohne BOM... wie kann man das bewerkstelligen?

Funktion zum Export


private void ExportToSpreadsheet(DataTable table, string name) {
	HttpContext context = HttpContext.Current;
	context.Response.Clear();

	foreach (DataControlField dcf in gv.Columns) {
		context.Response.Write(dcf.HeaderText + ";");
	}

	context.Response.Write(Environment.NewLine);
	foreach (DataRow row in table.Rows) {
		for (int i = 0; i < table.Columns.Count; i++) {
			context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
		}
		context.Response.Write(Environment.NewLine);
	}
	context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
	context.Response.ContentType = "text/csv";
	context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
	context.Response.End();
}

Hallo Sandro

Zu deinem konkreten Problem kann ich dir nicht weiterhelfen.
Ich würde dir aber vorschlagen, einen HttpHandler für dein Vorhaben zu benutzen.
Bei einem Handler kannst du dann sicherlich dein BOM-Problem besser handeln, da du nicht von der WebForm abhängig bist.

Siehe:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

@ Peter
Vielen Dank für die Antwort... sei mir aber nicht böse wenn ich das als letzte Möglichkeit ansehe. Es muss doch einen einfacheren Weg geben 😉

Ich habe gerade gemerkt, dass ich "ohne BOM" und "mit BOM" vertauscht habe.

Laut Notepad++ ist das exportierte File UTF-8 ohne BOM, wenn ich es in UTF-8 (mit BOM) konvertiere ist alles richtig und so wies sein soll.

Irgendjemand eine Idee, warum


context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
context.Response.ContentType = "text/csv";
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");

UTF-8 ohne BOM zurückgibt?

Hallo Sandro

Probiers mal mit einem Handler und schaue dir alle Möglichen Angaben zur Codierung, etc.. an.
Obwohl Response.Clear() alles weghauen sollte, könnte es sein dass noch was von der Page hängenbleibt~

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Ich habe nun in der Web.config


<globalization requestEncoding="iso-8859-2" responseEncoding="iso-8859-2"/>

eingetragen... läuft perfekt 😉