[c++] Umlaute DOS-Box

Rofi

Erfahrenes Mitglied
Hi,

es geht mal wieder um die Umlaute bzw. Zeichentabellen für die Ausführung von C++ Programmen in der DOS-Box unter Windows XP. Habe einiges hier im Forum dazu gefunden. Möchte diese Möglichkeiten aber noch um eine ergänzt haben.

Und zwar:
Wie müsste eine header-Datei aussehen, welche sich die aktivierte, also die aktuelle Zeichensatztabelle des Systems zu Beginn eines Programms "merkt" und dann die mit den deutschen Umlauten lädt.
Vor Beenden des Programms soll wieder auf die vorherige Tabelle umgestellt werden!

Diese header-Datei könnte immer eingebunden werden und man müsste sich für den Rest des Programms nicht mehr um die Umlaute kümmern!

Habe damit begonnen und wäre für jede Anregung dankbar!

Gruss, Rofi
 
Hallöchen,

ich weiß nicht genau was du vor hast,
aber nach dem was du geschrieben hast denk ich mir folgendes:

Du willst eine Art MiniProgramm die du in jedes deiner Projekte einbinden kannst.
Dieses eingebundenen MiniProgramm geht her und speichert die Aktuelle System Einstellung ob Unicode Ascii oder was auch immer und setzt ich glaub unicode für deustche Umlaute...
Beim beenden des Hauptprogramms wird das ganze wieder Rückgängig gemacht...

Unabhängig vom Problem, kenn mich nicht so aus mit den Zeichensätzen, aber schreib doch ne kleine DLL die zwei Methoden bietet:
- init() und
- shutdown()
init() :speichert und setzt was du willst.
shutdown() :macht das ganze rückgängig.

Die dll kann dann jedes deiner Programme einbinden und gut ist ;)
Weil ein Header sollte nur Deklarationen und inline Definitionen haben und nicht mehr...
 
Hi.

Ich denke was du vorhast ist nicht möglich. Du willst (so wie ich das verstehe) Programme die z.B. mit einem Windows Editor erstellt wurden und Umlaute enthalten in einer DOS-Box ausführen und die Umlaute sollen entsprechend richtig dargestellt werden.

Du kannst ja mal das Programm chcp ausprobieren welches die aktuelle Codepage (ohne Parameter) auflistet bzw. eine neue Codepage aktiviert die als Parameter übergeben wurde.

Wenn das funktionert (was es bei mir nicht tat) dann sollte ja ein einfaches
Code:
system("chcp nnn");
ausreichen.

Gruß
 
@ RuFFnEcK
genau so wie Du's beschrieben hast, habe ich mir das vorgestellt! Glaube aber C++-technisch leider noch nicht soweit zu sein um Deinen Vorschlag zu verwirklichen! Werd's mir in jedem Fall aber in den stack legen! ;)

@ deepthroat
ähnliche Antwort auch an Dich, werde mir Deinen Vorschlag ebenso zu Gemute führen!

Danke Euch!
Bin ich weiter gekommen, werde ich mich erneut zu dem Thema melden, werde es inzwischen auf kleiner Flamme köcheln lassen und noch nicht als erledigt markieren!

Gruß, Rofi
 
Hi Tobias,

habe jetzt lange genug experimentiert mit den Umlauten und bin zum Schluss gekommen, dass Dein Vorschlag wohl der einfachste sein wird!

Die Sache mit den code-Tabellen ist mir aber immer noch schleierhaft. Woher weiß ich denn, welche code-Tabelle aktiviert ist. Bei Dir scheint's jedenfalls eine andere zu sein als bei mir. Denn,
gebe ich...
Code:
std::cout<<" ue = \252";
...ein, wird's bei mir ein Winkel, obwohl es bei code 252 der ascii-Code-Tabelle nach ein --> ü <--sein müsste!

Gebe ich dagegen
Code:
std::cout<<" ue = \201";
//bzw.
std::cout<<" ue = \x81";
ein, erhalte ich ein --> ü <--

Habe einen deutschen Rechner mit deutschsprachigem Betriebssystem und deutscher Tastatur! Wieso gibt's da trotzdem Unterschiede?

Gruß, Rofi
 
Rofi hat gesagt.:
Hi Tobias,

habe jetzt lange genug experimentiert mit den Umlauten und bin zum Schluss gekommen, dass Dein Vorschlag wohl der einfachste sein wird!

Die Sache mit den code-Tabellen ist mir aber immer noch schleierhaft. Woher weiß ich denn, welche code-Tabelle aktiviert ist.
Das kann dir das Programm chcp verraten. Wie man das allerdings zur Laufzeit ermitteln könnte weiß ich nicht.
Rofi hat gesagt.:
Bei Dir scheint's jedenfalls eine andere zu sein als bei mir. Denn,
gebe ich...
Code:
std::cout<<" ue = \252";
...ein, wird's bei mir ein Winkel, obwohl es bei code 252 der ascii-Code-Tabelle nach ein --> ü <--sein müsste!
Welcher ASCII Tabelle denn? In MS-DOS Codepage 850 (die standardmäßig in der DOS-Box eines deutschen Windows aktiviert ist) ist das ü das 129 Zeichen in der Tabelle, also kannst du entweder die hexadezimale Schreibweise \x81 bzw. die oktale Schreibweise \201 verwenden.

In der sogenannten ANSI Codepage (MS-Windows Codepage 1252) ist das ü das 252 Zeichen in der Tabelle, also kann man entweder \xfc respektive \374 für dieses Zeichen schreiben.

Gruß
 
Um das klar zu stellen: ASCII geht nur von 0-127! Es gibt nur EINE ASCII-Tabelle!
Ein kleiner Tipp:
Code:
#define ue "\201"
#define Ue ...

Verwendung:
printf(" Brauchst du ne T"ue"te ?");
 
Zurück