Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Umlaute und Sonderzeichen bei .csv export
Blogscreen
myCSharp.de - Member

Avatar #avatar-2764.gif


Dabei seit:
Beiträge: 344
Herkunft: Stuttgart

Themenstarter:

[erledigt] Umlaute und Sonderzeichen bei .csv export

beantworten | zitieren | melden

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Blogscreen am .
:baby:-> :]-> 8o->
private Nachricht | Beiträge des Benutzers
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 902

beantworten | zitieren | melden

Hallo,

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

mfg
serial
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Blogscreen
myCSharp.de - Member

Avatar #avatar-2764.gif


Dabei seit:
Beiträge: 344
Herkunft: Stuttgart

Themenstarter:

beantworten | zitieren | melden

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

              
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Blogscreen am .
:baby:-> :]-> 8o->
private Nachricht | Beiträge des Benutzers
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 902

beantworten | zitieren | melden

@herbivore, ja da hast du natürlich recht, andersherum =)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Blogscreen,
Zitat
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
private Nachricht | Beiträge des Benutzers