Windows Vista, Umlaute
-
Jeder kennt es vermutlich: cout << "ä" << endl;
Wird dies unter Windows Vista nun endlich korrekt angezeigt?
-
Nein leider nicht
-
Das ist eigentlich kein Problem des Betriebssystems. cout << "ä" bewirkt, dass eine bestimmte Bytefolge in cout geschrieben wird. Wenn diese der Kodierung der Konsole entspricht, steht am Ende das richtige Zeichen da. Beim VC++ hat es bei mir schon oft gewirkt, den Quelltext in einer anderen Kodierung abzuspeichern. Daraufhin wurde das String-Literal durch eine andere Bytefolge repräsentiert. Ich weiß nicht, was der C++ Standard dazu sagt (wahrscheinlich zu wenig), aber generell finde ich die Trennung bzw. den Übergang Zeichenstrom <-> Bytestrom in der Standardbibliothek von C++ nicht sauber.
Ich weiß nicht, wie BS-unabhängig dein Programm werden soll aber ich würde lieber die Windows API Funktionen benutzen, um irgendwelche Ausgaben zu machen, mit denen hast du auch mehr Möglichkeiten. Das selbe gilt für das Schreiben in Dateien. Konzeptionell braucht man zwischen den Zeichen und dem Bytestrom einen Encoder bzw. Decoder, davon gibt es im Windows API und im .Net Framework einige (zum Beispiel für UTF-8 oder für das was die Konsole benutzt).