Hallo ich habe ein Problem beim abspeichern einer Datei. Ich lese eine Unicode Textdatei ein und will sie als Ascii CSV-Datei abspeichern. Das Problem liegt darin das die Buchstaben ä ö ü nicht richtig angezeigt werden. Wie bekomme ich das Problem gelöst? lg Peter
ASCII kennt keine Umlaute. Du meinst vermutlich CP1251 oder ISO8859-1, das sind (fast identische) 8-Bit-Zeichensätze, die Umlaute enthalten. Der Windows-eigene Texteditor "notepad" beispielsweise arbeitet bei nicht-Unicode-Dateien mit dieser Codierung. Lässt Du hingegen den Text in einem Konsolenfenster ausgeben, wird wieder eine andere Codierung verwendet, nämlich CP850 bzw. CP437. Womit konvertierst Du die Zeichen, womit lässt Du Dir die Ergebnisse anzeigen?
Lasse mir die Zeichen in einer Richtextbox anzeigen und in eine .csv Datei schreiben welche ich mit Excel öffne. Habe schon überlegt direkt den String der eingelesen Datei ins Ascii zu konvertieren habe da aber auch im Internet erstmal keine Hilfreiche information finden können. Bin auch relativ neu in der Materie. Ich lese die Zeichen über einen Streamreader ein und schreibe sie mit einem Streamwriter falls diese information weiterhilft.
Da Richtextboxen auch Unicode "verstehen", ist noch überhaupt nicht klar, wo Du irgendeine Konvertierung vornimmst. Und, wie schon mehrfach erwähnt: ASCII kennt keine Umlaute. Wenn Du CSV-Dateien für Excel erzeugen willst, dann ist CP1251 bzw. ISO8859-1 die richtige Wahl. Deine Programmiersprache da bietet ganz sicher entsprechende Zeichensatzkonvertierungsfunktionen, notfalls musst Du die des Betriebssystems selbst verwenden (wie z.B. die Win32-API-Funktion WideCharToMultiByte http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130%28v=vs.85%29.aspx).
Peter schrieb: > abspeichern. Das Problem liegt darin das die Buchstaben ä ö ü nicht > richtig angezeigt werden. Wie bekomme ich das Problem gelöst? Die Geschichte von Unicode ist eine Geschichte voller Missverständnisse. Du hast übrigens nicht nur ein Problem mit dem Umlauten, sondern auch mit den anderen grob 110000 (einhundertundzehntausend) moeglichen Zeichen. Alles was Du machen kannst ist die Zeichen, die es auch in ASCII gibt, zu "konvertieren" und den Rest musst du wohl oder uebel einfach Wegwerfen oder gegen einen Platzhalter ersetzen.
1 | // Passendes Encoding holen: |
2 | Encoding enc=Encoding.GetEncoding(1252); // Codepage 1252 |
3 | |
4 | // String in Byte-Array mit dem gewünschten Zeichensatz umwandeln: |
5 | byte[] stringData=enc.GetBytes("Hallöööööö!!"); |
6 | |
7 | // Byte-Array wegspeichern: |
8 | File.WriteAllBytes(@"c:\hierhin\text.txt",stringData); |
Tabelle der Zeichensätze ist z.B. hier zu finden: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.