Ich habe eine Download-Funktion zum Herunterladen von Nachrichten in eine CSV-Datei (Code ist unten) gemacht. Jetzt, wenn ich es in Notizblock oder Notizblock öffne ++ sehe ich das:
NY ╬ ║ ░ ░ ░ <<
(und das ist, was in der Datenbank ist)
Nun, wenn ich es in Ms-Excel öffne, zeigt es folgendes:
É NY • ¬ â • â--/ / /
Wenn ich es in Notepad ++ öffne, heißt es, dass es in 'UTF8 ohne BOM' kodiert ist. Wenn ich es (in Notizblock ++) zu UTF-8 kodiere, geht alles gut (das heißt, Excel zeigt auch die richtigen Zeichen an)
Aber wie kann ich sicherstellen, dass die Datei, die ich aus meinem Code erstellt habe, UTF-8 ist?
Das ist mein Code:
%Vor%Bearbeiten:
meine Funktion gibt jetzt ein ByteArray
mit dieser Umwandlung zurück
und mein Download ist jetzt das:
%Vor%Vielleicht möchten Sie versuchen, die Klasse UTF8Encoding zu verwenden. Der Konstruktor hat einen Parameter, der bestimmt, ob er die Stückliste bereitstellen soll oder nicht. Sie müssen wahrscheinlich die GetBytes-Methode verwenden und die Zeichenfolge als eine Folge von Bytes in die Antwort schreiben und nicht zurück in ein .net-String-Objekt konvertieren.
Zareths Antwort half dem OP, aber es beantwortete die Frage nicht wirklich. Hier ist die richtige Lösung von diesem anderen Beitrag :
%Vor% Die Byte-Reihenfolge-Markierung (die technisch für UTF8 nicht erforderlich ist) weist auf bestimmte Programme (z. B. Excel & gt; 2007) hin, die darauf hinweisen, dass Sie UTF8 verwenden. Sie müssen es manuell über die Methode GetPreamble()
einfügen.
Sie könnten Ihren Code etwas vereinfachen:
%Vor% Soweit es die UTF-8-Kodierung betrifft, befürchte ich, dass das Problem in dieser GetPersonalMessages
-Methode liegt. Möglicherweise müssen Sie einen Stream oder ein Byte-Array zurückgeben, die Sie direkt als Datei zurückgeben könnten.
Tags und Links c# asp.net character-encoding asp.net-mvc-2 encoding