Hallo,
ich habe hier ein kleines Quick & Dirty Snippet mit welchem ich Daten aus Textboxen
in eine .csv speichere.
Passt auch soweit, jedoch werden Umlaute und z.B. "ß" nicht richtig konvertiert,
es werden statt diesen Zeichen andere z.b. statt "ö" dieses "ö" (UTF8?) eingefügt.
Ich vermute ich muss den String vor dem speichern in die .csv noch konvertieren,
hat da jemand einen Tipp parat?
string filePath = @"C:\Users\Exceltest\1.csv";
string delimiter = ",";
string[][] output = new string[][]{
new string[]{Wert.Text.ToString() }};
int length = output.GetLength(0);
StringBuilder sb = new StringBuilder();
for (int index = 0; index < length; index++)
sb.AppendLine(string.Join(delimiter, output[index]));
File.WriteAllText(filePath, sb.ToString());
👶-> :]-> 8o-> 🙂
Hallo,
du musst UTF-8 verwenden (für das CSV-File).
mfg
serial
Hallo serial,
wohl eher andersherum. Wenn man kein Encoding angibt, dann wird standardmäßig UTF-8 verwendet. Vermutlich ist Encoding.Default passend ...
Hallo Blogscreen,
... jedenfalls musst du das richtige Encoding verwenden, also das, das die Anwendung verwendet, mit der du die CSV anschaust bzw. weiterverarbeitest.
Tut mir leid das zu sagen, aber das ist eine [Hinweis] Wie poste ich richtig? Punkt 1.1.1-Frage.
herbivore
PS: Auf einen Hinweis von Programmierhans hin hier noch ein Link auf Encoding Tester: Zeigt den (256er-)Zeichensatz eines Encodings oder eine Datei im gewählten Encoding, den man benutzen kann, wenn man aus anderen Quellen bereits eine (Beispiel-)Datei mit Umlauten hat, die korrekt angezeigt bzw. weiterverarbeitet wird, um deren Encoding zu ermitteln.
So, ich habe die Lösung.
Es war wie herbivore vermutet hat
Encoding.Default
Ich habe gedacht das sofern kein Encoding angegeben ist bereits die Default genutzt wird. Nun weiß ich beim nächsten mal bescheid.
Danke für den Tipp!
Hier der funktionierende Code:
string filePath = @"C:\Users\Exceltest\1.csv";
string delimiter = ",";
string[][] output = new string[][]{
new string[]{Wert.Text.ToString() }};
int length = output.GetLength(0);
StringBuilder sb = new StringBuilder();
for (int index = 0; index < length; index++)
sb.AppendLine(string.Join(delimiter, output[index]));
File.WriteAllText(filePath, sb.ToString(), System.Text.Encoding.Default);
👶-> :]-> 8o-> 🙂
@herbivore, ja da hast du natürlich recht, andersherum =)
Hallo Blogscreen,
Ich habe gedacht das sofern kein Encoding angegeben ist bereits die Default genutzt wird
der Name Default ist vielleicht etwas irreführend, weil er sich nicht darauf bezieht, welches Encoding die I/O-Operationen standardmäßig verwenden, sondern welches das Default-Encoding des Windows-Systems ist, also auch das, in dem (aus historischen Gründen) wohl immer noch die die allermeisten meisten Dateien vorliegen.
Doch spätestens, wenn das Ergebnis nicht stimmt, weiß man ja, dass es am Encoding liegen muss (entweder an dem, das beim Schreiben verwendet wurde oder an dem, dass das Anzeige- bzw. weiterverarbeitende Programm verwendet; beide müssen zusammen passen).
Encoding.Default ist ein reines 8-bit-Encoding, kann also nur 256 verschiedene Zeichen darstellen. Es können also nur (C#-)Strings verlustfrei gespeichert werden, die nur diese Zeichen enthalten. UTF-8 kann dagegen alle Zeichen, die in C#-Strings vorkommen können, repräsentieren. Gleichzeitig ist es für die häufig vorkommenden (7-bit-ASCII-)Zeichen recht kompakt (wie Encoding.Default nutzt es für diese Zeichen nur 8 Bit). Vermutlich ist UTF-8 aus diesen beiden Gründen (verlustfrei und kompakt) der Standard für die meisten I/O-Operationen.
herbivore