Forum: PC-Programmierung C# Unicode to Ascii


von Peter (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von __tom (Gast)


Lesenswert?

Gar nicht. Im ASCII (7bit) gibt es keine Umlaute.

von Peter (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Klaus Kaiser (Gast)


Lesenswert?

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.

von bluppdidupp (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.