mikrocontroller.net

Forum: PC-Programmierung Sonderzeichen in C++


Autor: stef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich Sonderzeichen oder griechische Buchstaben in C++ ausgeben??

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Worauf?

Autor: stef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Visual Studio 8 + console

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
"0"="Lucida Console"
"00"="Andale Mono"
"000"="Consolas"

  

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.