Hilfe ich drehe durch wegen Unicode
-
Hallo Leute, ich muss mich vermutlich selbst in die Klapsmühle einweisen, wenn mir nicht bald jemand hilft
Ich möchte diesen String: €/EUR, π/PI in der Konsole ausgeben.
wchar_t wc[] = L"€/EUR, π/PI"; // Das [cpp]-tag verwurstet mein Pi Symbol hier, nicht ich ;) MessageBox(0, wc, 0, 0); wprintf(L"%s", wc);
Die Messagebox gibt dadurch meinen String brav aus, aber die Konsole zeigt Fragezeichen statt der zwei Sonderzeichen.
Meine Windows 7 Konsolenschrift (Consolas) kennt beide Sonderzeichen; sie lassen sich manuell eintippsen.
Wenn ich nun noch dieses vorranstelle:
locale::global(locale("german"));
dann ist das € Symbol immer noch ein Fragezeichen, das π Symbol ist aber in ein "p" gewandelt. Hilft mir also scheinbar auch nicht weiter.
Mein VS2010 Projekt ist auf Unicode gestellt (ist ja Standard), und die .cpp Datei mit Unicode (1200) abgespeichert.
Händisch jedes Sonderzeichen mit "\x1234" o.s.ä. umzuschreiben, ist mir zu viel der Liebesmüh. Es muss hier doch eine Lösung geben!
Tschau
-
Benutzt du denn
std::wcout
?
-
Vermutung schrieb:
Benutzt du denn
std::wcout
?Hallo, wcout liefert mir das gleiche Ergebnis wie wprintf.
Sonderzeichen wie ö, ä, ü, ß lassen sich darstellen, nur Dinge wie € und π nicht
-
Scheinbar ist die einzige Möglichkeit die windows api WriteConsole. Nunja, wenigstens kommt so die Ausgabe zustande.
Danke an den unregistrierten Nutzer, der offenbar als einziger diese Problematik würdigen wollte
-
Vielleicht auch, weil 5min Recherche im Internet wohl geholfen hätten
http://stackoverflow.com/questions/5750884/wcout-not-writing-wide-character-out-to-command-prompt
MfG SideWinder
-
Hallo SideWinder, diese "nur 5 Minuten suchen" Kommentare bringen mich immer etwas zum schmunzeln, denn es würden sogar nur 10 Sekunden reichen, wenn man die richtigen Stichworte kennt, Dinge ausschliessen kann und vieles mehr
Ich habe natürlich schon STUNDEN nach einer Lösung gesucht (auch mit google bevor ich euch hier im Forum belästigen wollte. Auch auf stackexchange habe ich dutzende Threads zu dem Thema gelesen; aber keines – einschließlich deines – der Themen lieferte eine funktionierende Lösung.Teste es doch spasseshalber mal selbst bei dir:
locale loc = locale("German_germany"); locale::global( loc ); wcout.imbue( loc ); wcout << "€€€" << endl;
Mein schönes PI Symbol teste ich hier erst gar nicht, denn mit obigem code geht sogar das € Zeichen nicht hehe
-
Gibt es denn hier noch etwas aktuelleres:
http://www.c-plusplus.net/forum/161855Denn der Artikel, wenn ich den richtig interpretiere, weist ja in Richtung Windows mit NET.
Oder sind da zur Zeit immer noch betriebssystem- und bibliothekenabhängige Lösungen angesagt?
MfG f.-th.
-
Hier mal Unicode Standart v6.0 mit pi:
http://unicode.org/charts/PDF/U0370.pdf
griechisch und koptischIst auch für mathematische und physikalische Formeln interessant.
MfG f.-th.
-
Hallo f.-th!
Ich habe mittlerweile die Lösung gefunden; unglaublich wie versteckt sie war bei so einem Allerweltsproblem.
_setmode(_fileno(stdout), _O_U16TEXT);
Tschau
-
Ich entschuldige mich dann wohl besser für meine ironische Bemerkung Mehr dazu habe ich jetzt trotzdem via Google gefunden, allerdings tatsächlich erst als die Antwort schon da war. Der Vollständigkeit halber die Links zu Jochens Blog:
http://blog.kalmbachnet.de/?postid=23 (warum es nicht geht)
http://blog.kalmbachnet.de/?postid=98 (wie es geht)Edit: Hier noch erweiterte Probleme, die sich dann damit auftun: http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2009-10/msg00116.html
MfG SideWinder
-
Hier noch mal etwas, wenn kein MS-Compiler am Start ist:
http://www.codeguru.com/forum/archive/index.php/t-501416.htmlHab keinen zum Testen, eventuell funktioniert beides auf MS-Compilern.
MfG f.-th.