Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Umlaute bei Konsolenanwendungen (https://www.delphipraxis.net/182241-umlaute-bei-konsolenanwendungen.html)

MrSpock 11. Okt 2014 20:27

Umlaute bei Konsolenanwendungen
 
Hallo,

muss man bei einer Konsolenanwendung in C++ (XE6) zur Ausgabe eines Umlautes weiter so vorgehen:

Code:
const unsigned char UE = static_cast<unsigned char>(154);
...
cout << UE << "bung macht den Meister!" << endl;
oder kann man in der IDE irgendetwas einstellen, so dass in der Windowskonsole das richtige ausgegeben wird, wenn man:

Code:
cout << "Übung macht den Meister!";
schreibt?

Namenloser 11. Okt 2014 20:31

AW: Umlaute bei Konsolenanwendungen
 
Mit CharToOem (und OemToChar für die andere Richtung) kann man zwischen den beiden Zeichensätzen konvertieren.

DeddyH 11. Okt 2014 20:39

AW: Umlaute bei Konsolenanwendungen
 
Besser CharToOEMBuf, siehe Waenhinweis

himitsu 11. Okt 2014 20:49

AW: Umlaute bei Konsolenanwendungen
 
Man kann auch gern TEncoding verwenden, oder man definiert sich einen String mit der OEM-CodePage und nutzt die automatischen Konvertierungen. (müsste in C++ genauso gehn, wie in Delphi)

sx2008 11. Okt 2014 20:58

AW: Umlaute bei Konsolenanwendungen
 
Man kann der Console auch sagen welcher Zeichensatz für die Ausgabe benützt werden soll.
SetConsoleOutputCP()
Ich hab's noch nie getestet aber mir scheint das ist die eleganteste Lösung für das Umlautproblem.
Bitte kurze Info hier im Forum ob's funtkioniert weil ich könnte das für ein altes C++ Programm gebrauchen ;-)

MrSpock 11. Okt 2014 21:11

AW: Umlaute bei Konsolenanwendungen
 
Zitat:

Zitat von sx2008 (Beitrag 1275636)
Man kann der Console auch sagen welcher Zeichensatz für die Ausgabe benützt werden soll.
SetConsoleOutputCP()
Ich hab's noch nie getestet aber mir scheint das ist die eleganteste Lösung für das Umlautproblem.
Bitte kurze Info hier im Forum ob's funtkioniert weil ich könnte das für ein altes C++ Programm gebrauchen ;-)

Ichhabe mal mit

Code:
#include <Wincon.h>
versucht, die Header Datei dazu einzubinden, bekomme aber gleich Fehler, z.B.:

Zitat:

[bcc64 Fehler] wingdi.h(286): unbekannter Typname 'POINT'
Wie kann ich SetConsoleOutputCP() einsetzen?

Im Moment habe ich folgende Lösung, die funktioniert:
Code:
   
  setlocale(LC_ALL,"de_DE");
  wcout << "Hallo Welt, schönes Wetter";

sx2008 11. Okt 2014 21:25

AW: Umlaute bei Konsolenanwendungen
 
Zitat:

Zitat von MrSpock (Beitrag 1275637)
versucht, die Header Datei dazu einzubinden, bekomme aber gleich Fehler, z.B.:
Zitat:

[bcc64 Fehler] wingdi.h(286): unbekannter Typname 'POINT'

Dann fehlt ein Include davor dass die Struktur POINT deklariert.
Ach ja C++ mit seinen Includedateien ist halt eine Qual.

Die Lösung mit setlocale() ist aber auch ok; besser als eine Windows API Funktion aufrufen zu müssen.

himitsu 11. Okt 2014 23:12

AW: Umlaute bei Konsolenanwendungen
 
Man könnte sich auch selber Input/Output-FileVariablen erstellen (AssignFile, CreateFile oder als FileStream),
oder die CodePage der Standard-Variablen (Delphi-Referenz durchsuchenInput, Delphi-Referenz durchsuchenOutput, Delphi-Referenz durchsuchenErrOutput in System) ändern.
Delphi-Referenz durchsuchenSetTextCodePage

Man kann die CodePage der Konsole ändern.
MSDN-Library durchsuchenSetConsoleCP / MSDN-Library durchsuchenSetConsoleOutputCP

Oder man passt Delphi an die Konsole an.
Per GetConsoleCP die CodePage auslesen, Delphi als ANSI-CodePage zuweisen (Delphi-Referenz durchsuchenDefaultSystemCodePage/Delphi-Referenz durchsuchenSetMultiByteConversionCodePage, setlocale usw.) und vorallem bei Nicht-Unicode-Delphis noch MSDN-Library durchsuchenSetFileApisToOEM (im Gegensatz zum Standard von MSDN-Library durchsuchenSetFileApisToANSI).

Sir Rufo 12. Okt 2014 07:28

AW: Umlaute bei Konsolenanwendungen
 
Nur so fürs Protokoll :mrgreen:(ja, ich weiß dass hier nach C++ gefragt wurde :))

MrSpock 12. Okt 2014 11:12

AW: Umlaute bei Konsolenanwendungen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1275644)

Nicht nur, dass ich nach C++ gefragt habe. Ich wollte ja auch auf eine "manuelle" Umwandlung vermeiden. Deshalb sind alle 3 verlinkten Beiträge nicht das, was ich wissen wollte. SetConsoleCP ist wohl ein möglicher Ansatz, den ich aber noch nicht hinbekommen habe. SetLocale funktioniert für mich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz