Forum: PC-Programmierung Sonderzeichen in C++


von stef (Gast)


Lesenswert?

Wie kann ich Sonderzeichen oder griechische Buchstaben in C++ ausgeben??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Worauf?

von stef (Gast)


Lesenswert?

Visual Studio 8 + console

von Karl H. (kbuchegg)


Lesenswert?

Probier mal:

  for( int i = 0; i < 255; ++i )
    std::cout << (char)i << " ";
  std::cout << std::endl;

Also einfach einen entsprechenden Code umcasten auf char.
Obiges gibt die komplette Code-Tabelle aus. Musst du halt suchen,
welcher Code deinem gewünschten Zeichen entspricht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Konsolenfenster nutzt üblicherweise einen Pixelfont, der aber 
versteht nur 8-Bit-Zeichen. Wird das Konsolenfenster auf die Nutzung 
eines geeigneten TrueType-Fonts umgestellt (Lucida Console, Andale 
Mono*, Consolas*), dann können auch 16-Bit-Unicode-Zeichen ausgegeben 
werden; je nach verwendetem Font ist die Unterstützung mehr oder weniger 
ausführlich.

Leider hat MS keinen Weg dafür vorgesehen, per Software den Konsolenfont 
auszuwählen, das muss manuell erfolgen.

Der Pixelfont ist üblicherweise für Codepage 850 eingerichtet, das 
entspricht weitestgehend dem Textzeichensatz alter DOS-PCs. Daher werden 
auch ANSI-Umlaute nicht korrekt ausgegeben; das funktioniert erst nach 
Umstellen der Konsolencodepage auf 1251.

*) geht nur nach Registry-Manipulation:
1
Windows Registry Editor Version 5.00
2
3
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
4
"0"="Lucida Console"
5
"00"="Andale Mono"
6
"000"="Consolas"

  

von Benedikt K. (benedikt)


Lesenswert?

Kann man die Codepage in der Konsole umstellen ?
Also nicht global im gesamten Windows, sondern nur lokal während der 
Laufzeit des Programmes ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja. Für eine laufende Konsolensitzung geht das mit

mode con cp select=1252


(Ich hatte mich in meinem vorherigen Posting vertan, ANSI ist 1252, 
nicht 1251)

In einer Konsolenanwendung selbst geht das mit den Win32-API-Funktionen

  SetConsoleOutputCP(1252);
  SetConsoleCP(1252);

Um die alte zu restaurieren, kann diese vorher mit

  GetConsoleOutputCP();
  GetConsoleCP();

bestimmt werden.

Jedoch funktioniert das Umstellen der Codepage nur mit dem von in der 
Konsole standardmäßig verwendeten Schriftart - ist die Pixelschrift 
aktiv, hilft das Umstellen der Codepage gar nichts, wenn Unicode-Zeichen 
ausgegeben werden sollen, die nicht in der Pixelschrift enthalten sind. 
Und die Pixelschrift enthält halt nur die zu Codepage 850 gehörenden 
Zeichen.

Umlaute werden dann korrekt umgesetzt, aber griechische, kyrillische 
oder auch mathematische Zeichen funktionieren nicht.

Nicht nur deswegen ist es äußerst ratsam, in der Konsole eine 
TrueType-Schriftart wie Andale Mono o.ä. zu verwenden.

Übrigens funktionieren andere als die von mir erwähnten Schriftarten 
nicht in Konsolfenstern, selbst wenn diese nichtproportional sind; die 
Courier New beispielsweise kann zwar wie oben angegeben in der Registry 
eingetragen werden, Windows akzeptiert sie aber trotzdem nicht.

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.