Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.11.2012, 22:20

Unicode in Konsole

Halle liebes Forum!

Wie man schon aus der Überschrift entnehmen kann, bin ich momentan auf der Suche nach einem Weg Unicode in der Konsole darzustellen. Es geht mir darum Zeichen wie "ä", also Sonderzeichen ohne weiteres einlesen zu können und auch wieder ausgeben zu können. Das mitunter auch in Bezug auf Dateien, da ich diese vielleicht auch einbinden möchte.

Ich hab schon eine Weile im Internet gesucht, jedoch bisher keine wirklich funktionierende Methode gefunden. Es kann sein das ich auch einfach nicht gut im Suchen bin, jedoch hoffe ich hier eine Antwort zu bekommen.

Wenn es möglich ist, so wäre es schön wenn man keine plattformspezifischen Wege nutzt, wie etwa die WindowsSDK. Das habe ich auch schon beobachten dürfen, würde ich aber gerne nach Möglichkeit vermeiden.

Ich danke im Voraus!

Lg
Hans_Peter

PS: Falls es sinnvoll ist das zu erwähnen, ich benutze Visual C++ Express 2010 mit dem Betriebssystem Windows 7, sollte ich irgendwelche Informationen unterschlagen haben die noch gebraucht werden so reiche ich sie gerne nach :) .

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

21.11.2012, 22:29

Du könntest wstring, wcout und wcin verwenden.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

22.11.2012, 11:24

Das habe ich bereits versucht, es hat nur leider nicht funktioniert.

Ich habe dann beispielsweise mit "wcin" ein "Ü" eingelesen, in einen "wstring" gespeichert und dann über "wcout" ausgeben wollen, leider kam dann ein "s" als Ausgabe.

Woran könnte das liegen?

Hier mein Quellcode, vielleicht hilft es ja:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    //this part is from a website

    char* locale = setlocale(LC_ALL, "English"); // Get the CRT's current locale.

    std::locale lollocale(locale);

    setlocale(LC_ALL, locale); // Restore the CRT.

    std::wcout.imbue(lollocale); // Now set the std::wcout to have the locale that we got from the CRT.

    std::wcout << L"¡Hola!Ä\n";

    //and this part is my own code which is not working as it should

    std::wstring ch = L"Über den Wolken..." ;

    std::wstring str ;

    std::wcin.imbue ( lollocale ) ;

    std::getline ( std::wcin , str ) ;

    std::wcout << str << std::endl ;

    std::wcout << ch ;

    std::cin.get() ;


Lg
Hans_Peter

PS: Das "L" vor den Strings fungiert ähnlich wie bei Zahlen nehme ich an, also

C-/C++-Quelltext

1
2
signed long int blabla = 1L ;
wchar_t blupp = L'Ä';

Stimmt das?

freedmo

Frischling

Beiträge: 23

Beruf: Student - Bachelor of Science Angewandte Informatik

  • Private Nachricht senden

4

25.11.2012, 15:00

Ich habe mal dein Beispiel genutzt und folgendes funktioniert bei mir auch. Nutze jedoch Code::Blocks und VS2012(Siehe 2 Beispiel).
Dies Beispiel liest nur Zeichen ein, und bei mir funtionieren auch 'Ö' 'Ü' 'Ä' 'ö' 'ü' 'ä' .

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Code::Blocks
#include <iostream>

using namespace std;

int main()
{
    wstring str ;

    getline ( wcin , str ) ;

    wcout << "Ausgabe: " << str << endl ;

    cin.get() ;

    return 0;
}

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Visual Studio 2012
#include <iostream>
#include <locale>

using namespace std;

int main(){
    //Erster Ansatz, liest jedoch nur ein Zeichen.
    wstring str ;
    str = wcin.get();

    wcout << str << endl;
    wcout << "---------" << endl;
    fflush(stdin);
    //Zweiter Ansatz, liest alles jedoch kein wstring.
    wchar_t p[50];
    wcin.getline ( p, 50 );
    wcout << p << endl; 
    wcout << "---------" << endl;
    cin.get();
    return 0;
}


Quellen:
http://h30097.www3.hp.com/cplus/wcin_3c__std.htm
http://www.cplusplus.com/forum/windows/9797/

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »freedmo« (25.11.2012, 15:18)


5

30.11.2012, 19:28

freedmo danke für deine Antwort.

Ich habe jetzt, da ich wieder Zeit habe, weiter Dinge ausprobiert und musste merken, dass es eigentlich furchtbar einfach ist. :dash:

Man braucht eigentlich nur eine Funktion, so sieht dann der Quellcode aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>

signed int main ( void ) {

//Unicode
setlocale ( LC_CTYPE , "" ) ;

/*
* hier dann mit "wstring" und anderem arbeiten
*/

return ( 0 ) ;

}


Das wär´s dann auch schon. Auf alle Fälle danke für eure Beiträge.

Lg
Hans_Peter

Werbeanzeige