ASCII-Zeichen jenseits der 127 auf Windows- und Linux-Konsole gleich darstellen



  • Ich wollte ein kleines ASCII-Spiel programmieren, aber mir reichen die öden Standardzeichen für die Grafik nicht. Unter DOS und Windows ist das kein so großes Problem. Da gibt es einen netten Satz an grafischen Zeichen und wenn ich die nehme, die in der Codepage 850 und 437 gleich sind, dürfte ich den größten Teil der Benutzer abgedeckt haben. Das Problem ist nur: Das Spiel soll auch unter Linux laufen. Und da gibt es leider einen komplett anderen Zeichensatz. Wie kann ich es also in Linux hinbekommen, dass in einer Konsolenanwendung der ASCII-Zeichensatz aus einer dieser Codepages genommen wird? Muss man das allgemein im Betriebssystem einstellen oder kann ich das mit betriebssystemspezifischen Funktionen im Programm selbst einstellen (so dass es auch nur für die Dauer des Programms gilt)?



  • Ey Es Ci Ei Ei schrieb:

    Ich wollte ein kleines ASCII-Spiel programmieren, aber mir reichen die öden Standardzeichen für die Grafik nicht. Unter DOS und Windows ist das kein so großes Problem. Da gibt es einen netten Satz an grafischen Zeichen und wenn ich die nehme, die in der Codepage 850 und 437 gleich sind, dürfte ich den größten Teil der Benutzer abgedeckt haben. Das Problem ist nur: Das Spiel soll auch unter Linux laufen. Und da gibt es leider einen komplett anderen Zeichensatz. Wie kann ich es also in Linux hinbekommen, dass in einer Konsolenanwendung der ASCII-Zeichensatz aus einer dieser Codepages genommen wird? Muss man das allgemein im Betriebssystem einstellen oder kann ich das mit betriebssystemspezifischen Funktionen im Programm selbst einstellen (so dass es auch nur für die Dauer des Programms gilt)?

    ASCII definiert nur 127 Zeichen. Das, was du mit Codepages meinst, sind Erweiterungen des ASCII-Zeichensatzes, aber nicht mehr ASCII.

    Das unter Linux richtig hinzubekommen nicht ganz trivial, weil man spezielle Terminal-Befehle nutzen muss. Einfach bestimmte Zeichen ausgeben kann nicht funktionieren, weil jedes Terminal die ankommenden Bytes anders interpretiert. Aktuelle Systeme interpretieren die Bytes, die ein Programm ausgibt, üblicherweise als utf-8, ältere Systeme aber zum Beispiel als latin1. Dann gibt es aber auch Escape-Sequenzen, die dem Terminal Befehle statt Zeichen liefern.

    Es gibt Bibliotheken, die dir die low-level-Arbeit abnehmen, das Terminal nach den richtigen grafischen Symbole zu fragen und diese dann zu richtig zu benutzen. Statt es selber zu implementieren, würde ich empfehlen, so eine vorhandene Bibliothek zu nehmen. ncurses wär eine übliche.



  • Benutze einfach UTF-8 als Encoding für den Quellcode unter Linux. zB mit man: iconv(1) oder in deinem Editor.

    (UTF-8 bzw. Unicode hat sogar viel mehr Zeichen als die Windows-Codepage)


  • Mod

    rüdiger schrieb:

    Benutze einfach UTF-8 als Encoding für den Quellcode unter Linux. zB mit man: iconv(1) oder in deinem Editor.

    (UTF-8 bzw. Unicode hat sogar viel mehr Zeichen als die Windows-Codepage)

    Aber kann denn wiederum die Windowskonsole UTF-8? Die benutzt doch bestimmt diese unstandardisierten erweiterten ASCII-Tabellen.



  • Meines wissens ist die Windowskonsole nicht UTF-8. Entsprechend musst du für die Ausgabe OS-spezifisch Ausgeben lassen (also mit #ifdef WIN32 als Beispiel 😉 )

    so kannst es machen, dass wenn es Linux ist die Ausgabe erst konvertiert werden muss.


Anmelden zum Antworten