Laden...

[erledigt] Umlaute und Sonderzeichen bei .csv export

Erstellt von Blogscreen vor 11 Jahren Letzter Beitrag vor 11 Jahren 13.095 Views
Thema geschlossen
Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 11 Jahren
[erledigt] Umlaute und Sonderzeichen bei .csv export

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-> 🙂

S
902 Beiträge seit 2007
vor 11 Jahren

Hallo,

du musst UTF-8 verwenden (für das CSV-File).

mfg
serial

49.485 Beiträge seit 2005
vor 11 Jahren

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.

Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 11 Jahren

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-> 🙂

S
902 Beiträge seit 2007
vor 11 Jahren

@herbivore, ja da hast du natürlich recht, andersherum =)

49.485 Beiträge seit 2005
vor 11 Jahren

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

Thema geschlossen