Umlaute über cin in ein char-Variable???
-
/// einmal am Programmbeginn cin.imbue( locale("de_DE")); cout.imbue( locale("de_DE")); ... char cName0[40]; // <-ist Teil einer Struktur cout << "Vorname: "; cin >> tmpData->Data.cName0;
Die Strings de_DE, die ein entsprechendes Locale selektieren sind aber leider von Compiler zu Compiler unterschiedlich und nicht standardisiert. Du wirst also in deiner Compilerdoku nachschauen müssen.
Das Umstellen das Locales hat aber auch Auswirkungen auf z.B. die Ausgabe von Fließkommazahlen (Punkt und Komma im Gegensatz zur englischen Kodierung vertauscht).
-
Liegt an deinen Escape-Sequenzen für die Umlaute, schmeiß die raus und mach die Umlaute normal rein
-
Hab jetzt die Ausgabe nur da, wo es nötig ist mit wcout gemacht. An allen anderen Stellen hab ich ganz normal cout verwendet:
cout << " Mini-Datenbank 2006" << endl; cout << endl; cout << " Men\x81" << endl; cout << " 1. neue Person hinzuf\x81gen\n"; cout << " 2. alle Personen auflisten\n"; cout << " 3. Personendaten \x84ndern\n"; cout << " 4. Person l\x94schen\n"; cout << " 5. Person suchen\n"; cout << " 6. Programm beenden\n"; cout << "Eingabe: "; wcin >> cMenu;
und es funktioniert endlich problemlos
Danke für eure Hilfe
-
Jo lieber gefrickelt, statt einfach die Umlaute reingeschrieben
-
Anon schrieb:
Das liegt ganz einfach daran, dass der ASCII-Zeichensatz keine Umlaute kennt.
Da musst du schon auf die wide-characters zurückgreifen:Beobachtung stimmt, Folgerung nicht ganz. Richtig ist, dass ASCII keine Umlaute kennt, aber ASCII standardisiert auch nur bis 127, darueber liegen meistens diverse Sonderzeichen, inklusive deutschen Umlauten.
-
@anon:
Tja, wenn es doch so einfach wär einfach die Umlate rein zu schreiben, aber dann bekomm ich nur so schöne Zeichen:wchar << L"ÄäÖöÜüß";
erzeugt: "-", ein o mit einem ~ drauf, geteilt Zeichen, ausgefülltes Rechteck, "³", ausgefülltes Rechteck.
Da is nix mit einfach Umlaute reinschreiben!!
-
Bashar natürlich hast du da recht, aber "char" ist ja nichtmal im standard auf signed oder unsigned festgelegt, also bleibt einem nichts anderes übrig als 0-127 als gültige werte für Zeichen anzusehen => ASCII
Wenn deine Shell da falsche Zeichen darstellt, dann liegt das nicht an deinem C++-Programm.
-
So, also meine Ausgabe auf dem Bildschirm ist ja jetzt wunderschön so mit ä's und ö's, aber beim Speichern eines Strings (wchar_t) gibt es jetzt probleme.
lese ich über wcin "Schäfer" ein und gebe es über wcout aus, so erscheint "Schäfer" auf dem Bildschirm. Wenn ich das jetzt aber in eine Datei mithilfe von fputws schreiben will steht dann "Sch„fer" drin. Das Programm setzt also für das "ä" den Hexcode 84 statt E4 ein.
Auch die Umstellung über cin.imbue, cout.imbue, wcin.imbue, wcout.imbue auf "German" war nicht von Erfolg gekrönt.
ich hab auch keine Lust jedesmal bei der Ausgabe in eine Datei den String zu prüfen, ob ein Umlaut drin ist und den dann entsprechend zu ersetzten.
-
Schreib mal äüö in ne Datei, also ohne deine Escape-Sequenzen dafür zu verwenden.
Wie gesagt liegt an der verwendeten shell.
-
Wenn ich "ÄäÖöÜüß" über fputs ausgeb ist alles in Ordnung, bei fputws wird aber nix in die Datei reingeschrieben!!
Wie kann ich das mit der shell ändern??
-
Anon schrieb:
Jo lieber gefrickelt, statt einfach die Umlaute reingeschrieben
das blöde ist, daß der editor unter umständen eine andere codepage benutzt als die konsole. da klappt das mit dem direkt reinschreiben leider nicht. und auch L"..."-stings nutzen nix, wenn der editor kein unicode benutzt. und selbst wenn, der c++-compiler verlangt ascii-quelltexte. da hilft eben nur "gefrickel"
-
Konfusius schrieb:
Anon schrieb:
Jo lieber gefrickelt, statt einfach die Umlaute reingeschrieben
das blöde ist, daß der editor unter umständen eine andere codepage benutzt als die konsole. da klappt das mit dem direkt reinschreiben leider nicht. und auch L"..."-stings nutzen nix, wenn der editor kein unicode benutzt. und selbst wenn, der c++-compiler verlangt ascii-quelltexte. da hilft eben nur "gefrickel"
Eben, bevor man mal schaut ob der Editor das auch gescheit speichert oder speichern kann, lieber frickeln
-
offensichtlich kann es der editor des threadstarters nicht, denn sonst hätte er ja kein problem.
PS: auf einmal spinnt das login
-
Versuch es auf der alten Weise und nutze dabei die ASCII - Tabelle.
so würde bspw. der Schäfer so geschrieben werden:cout << "Sch\x84fer";
für ein ö war es \x94
und für ein ü war es \x81
Ä = \x8E
Ö = \x99
Ü = \x9A
Dazu zusagen ist das du in einer cout Anweisung nicht mehr als zwei bspw. Ö's nehmen kannst
-
Das mit dem cout und so hab ich ja mitlerweile im Griff, aber wenn ich jetzt mit wcin z.B. ein "ö" eingelesen hab und mit fputws in eine Datei schreiben will, dann kommt da nur Sch.... an. Er schreibt zwar den hexcode 84 in die Datei, aber wenn ich die dann wordpad o.ä. öffne, dann steht da kein "ö"!!! So weit ich das jetzt rausbekommen hab muss da der Hex-Code E4 stehen um ein "ö" anzuzeigen.
-
Wo willst du die Ausgabe denn sehen, in der Kommandozeile oder in der Datei?
-
in der Datei
-
Gut OK es ist nicht die beste Lösung aber es ist ein Ansatz.
Führe dein Programm von der Console aus aus.
Hier tippst du bspw.: ASCII.exe >> Ausgabe.txt
Dabei schreibt er die gesamte Ausgabe in die Datei, und wenn du jetzt in Windows normal ein ä schreibst, wird es dir in der Console falsch ausgegeben, aber in der Datei wieder richtig.
-
ja schon klar, entweder ich bekomme es in der Konsole falsch angezeigt, in der Audgabe ist es richtig, oder es wird in der Konsole richtig angezeigt, in der Ausgabe aber nicht.
Aber gibt es da kein Hausmittelchen gegen diese Krankheit?