Umlaute elegant lösen.
-
Hallo,
Ich bin noch neu in C++ (erst 2 Tage) und habe das Problem, dass ich unter Linux gerne Umlaute und Sonderzeichen in der Konsole ausgeben würde.
Ich habe gesehen, dass das mit \x123 geht, aber das ist mir zu umständlich.
Kann ich nicht eine Methode schreiben, in der der String gescannt wird, und in Unicode umgewandelt wird?Regards,
blackbird
-
blackbirdXXX schrieb:
Hallo,
Ich bin noch neu in C++ (erst 2 Tage) und habe das Problem, dass ich unter Linux gerne Umlaute und Sonderzeichen in der Konsole ausgeben würde.
Ich habe gesehen, dass das mit \x123 geht, aber das ist mir zu umständlich.
Kann ich nicht eine Methode schreiben, in der der String gescannt wird, und in Unicode umgewandelt wird?Regards,
blackbirdwelche schnittstelle willste haben und wie schnell soll es sein?
es gibt auf deine fragen 244 optimale antworten, je nach deinen präferenzen.
einfachste lösung ist
cout<<"abc\x123def";
zu doof.
cout<<"abc" "\x123" "def";
isch schon lesbarer. sie nutzt aus, daß der präprozessor (der komplel, der die kommentare raushaut und die #defines macht, auch aneinanderfolgende string-literale zusammenhaut.
#define UMLAUT "\x123"
cout<<"abc" UMLAUT "def";
ist noch feiner.kann zu nervig sein. aber hat noch null performance delay.
kannst dir eine string machUmlaute(string const& str); basteln, die mit string::replace hantiert oder schnellerem.
cout<<machUmlaut("abcödef");oder kannst dir ein eigenes cout bauen, das den op<< geeignet überladen hat.
umlcout<<"abcödef";
ist aber ganz fiese jutsche hier und in die schublade over-engeneering zu stopfen.machUmlaut kann auch eine Klasse sein, wo der ctor einen zeiger auf char nimmt und erst bei der ausgabe nach ostream vom ostream& op(ostream&,machUmlaut const&) umgesetz wird. sehr geile performance. wie fast immer, wenn man an sich dynamisch aussehende sachen in c++ in typen stopft.
aber ich hab keine ahnung von deinem linux. ich hab nur ein paar jahre erfahrung unter windows und da gibt es nur so sachen wie die von mir genannten lösungen (und noch ein paar unbedeutende weitere und kombinationen). schau erstmal, ob du unter linux die konsole so einstellen kannst, daß die umlaute aus dem source-code korrekt kommen. das wäre das beste. wenn nicht, schau ob du mit cout<<"abc" UMLAUT "def"; oder cout<<machUmlaut("abcödef"); leben kannst. wenn nicht, freg gleich wieder hier, das könnte ein toller thread mit vielen tollen c++-tricks werden.
-
Man könnte - vor allem die Leute die eh nur wchar_t benutzen, zu denen gehöre ich - einfach eine Unicode-Konstante setzen und hoffen, dass alle den richtigen Unicode benutzen.
-
@Volkard: Ich werde eine Methode schreiben, die die Zeichen ersetzt.
Wo krieg ich eine Tabelle, welches Zeichen welchen Code besitzt?
-
z.B. aus nem Tafelwerk oder einer per Google gefundenen Tabelle.
@volkard: Wie ist dein letzter Vorschlag genau gemeint? Warum ist es schneller, 'nen String bei jedem cout umzuwandeln als einmal beim Konstruieren? Oder versteh' ich jetzt was ganz falsch?
-
spl@t schrieb:
z.B. aus nem Tafelwerk oder einer per Google gefundenen Tabelle.
@volkard: Wie ist dein letzter Vorschlag genau gemeint? Warum ist es schneller, 'nen String bei jedem cout umzuwandeln als einmal beim Konstruieren? Oder versteh' ich jetzt was ganz falsch?ich kann literale oder dateiinhalte ausgeben, ohne eine kopie machen zu müssen. wenn du natürlich den string 1000000-mal ausgeben willst, ist die kopie eventuell billiger.
-
Da gab es afaik auch mal einen Eintrag in der Konsolen-FAQ zu.
-
blackbirdXXX schrieb:
@Volkard: Ich werde eine Methode schreiben, die die Zeichen ersetzt.
Wo krieg ich eine Tabelle, welches Zeichen welchen Code besitzt?...oder aus dem Konsolenforum. Da gibts einen FAQ-Eintrag dazu.
MfG SideWinder
-
Habs gefunden: http://www.c-plusplus.net/forum/viewtopic.php?t=39326
Würde ich aber nicht gerade als elegant/komfortabel einstufen. Eher als Lösung die funktioniert und Einsteiger nicht überfordert
.
-
MaSTaH schrieb:
Habs gefunden: http://www.c-plusplus.net/forum/viewtopic.php?t=39326
Eher als Lösung die funktioniert und Einsteiger nicht überfordert.
Das soll es sein, selbst wenn eine Klasse fix und fertig geliefert wird - so zB die Improved Console, gibts immer wieder Fragen, wie es denn möglich sei, dies oder jenes einfacher zu machen - obwohl ein reiner Funktionsaufruf reichen würde. Das Einbinden von fremden Code macht da die meisten Sorgen.
MfG SideWinder