cin gibt keine Umlaute zurück



  • Hallo,
    immer wenn ich über die Konsole einen Umlaut in eine Textdatei schreiben will, wird dieser Umlaut nicht richtig in die Textdatei geschrieben oder der Umlaut wird richtig in die Textdatei geschrieben, ist allerdings dann in der Konsole wieder anders dargestellt.
    Wie sorgt man dafür, dass "cin" auch Umlaute annimmt? Die Textdatei, in der ich die Umlaute speichere, hat die "ANSI"-Codierung (falls das von Bedeutung ist).



  • Also es gibt glaube ich etwas cooles mit std::locale undso (Muss dir einer der Experten hier erklären).

    Sonst hier ein Thread, der dir helfen wird: (googeln hilft 😉 )
    http://www.c-plusplus.net/forum/39326-full

    EDIT: Entweder die Frage wurde bearbeitet und konkretisiert/geändert, oder ich hab einfach nur total gepennt. Wie dem auch sei, meine Antwort ist nicht gerade von Nutzen.

    Aber was du machen könntest (um mehr Hilfe zu bekommen): Zeig die Datei, deinen Code der dise einließt/ausgibt und die Ausgabe.



  • Ich habe das jetzt selbst gelöst. Vielen Dank für den Link, der hat mir sehr weiter geholfen.

    Ich poste hier einfach mal den Code dafür, wie man Umlaute "Konsolenreif" macht und diese "Lesereif" erhält 🙂

    Umlaute für Konsole "bereit" machen:

    string UmlautsToConsole(string in)
    {
    	string cache;
    
    	if (in.find("ä") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "ä") {
    				in.replace(i, 1, "\x84");
    			}
    		}
    	}
    	if (in.find("ö") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "ö") {
    				in.replace(i, 1, "\x94");
    			}
    		}
    	}
    	if (in.find("ü") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "ü") {
    				in.replace(i, 1, "\x81");
    			}
    		}
    	}
    	return in;
    }
    

    Umlaute von der Konsole in lesbare Umlaute "umwandeln":

    string UmlautsFromConsole(string in)
    {
    	string cache;
    
    	if (in.find("\x84") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "\x84") {
    				in.replace(i, 1, "ä");
    			}
    		}
    	}
    	if (in.find("\x94") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "\x94") {
    				in.replace(i, 1, "ö");
    			}
    		}
    	}
    	if (in.find("\x81") != UINT_MAX) {		
    		for (unsigned int i = 0; i <= in.length(); i++) {
    			cache = in[i];
    			if (cache == "\x81") {
    				in.replace(i, 1, "ü");
    			}
    		}
    	}
    	return in;
    }
    


  • Du hast das Problem vermutlich unter Windows. Da bietet die WinApi bereits die Funktionen
    OemToCharBuff und
    CharToOemBuff
    für an.



  • Navy schrieb:

    Ich poste hier einfach mal den Code dafür, wie man Umlaute "Konsolenreif" macht und diese "Lesereif" erhält 🙂

    Wenn dein Editor und deine Konsole unterschiedliche Zeichencodierungen benutzen, solltest du sie aneinander anpassen, statt mühsam Zeichen für Zeichen umzucodieren.


Anmelden zum Antworten