Hallo, nachdem ja auch SuSE auf UTF-8 umgesetellt hat (und RedHat seit langem) muss ich mich auchmal damit beschäftigen. Bei GUI-Anwendungen ist es ja einfach: Qt, Gtk und Java stellen alle Mechanismen bereit so dass man zumindest bei Qt und Java (Gtk kenne ich nicht so gut) kaum was falsch machen kann. Anders bei Konsolenprogrammen, die nur die Standardbibliothek für C und C++ verwenden. Ich habe da vor einigen Tagen mal im Internet rumgesucht und nirgends was wirklich gutes gefunden. Was ich gesehen habe, gibt es zwei Möglichkeiten: 1. Im ganzen Programm ggf. UTF-8 (d. h. die Zeichenkodierung der eingestellten locale) verwenden: * Wie gebe ich einen Text in Tabellenform aus? Muss ich mir da wirklich alles selber schreiben? printf("%-20.20s") beispielsweise zählt ja Bytes und keine Zeichen. * Muss ich mir selber ein strlen() schreiben, wenn ich die Zeichen- zahl statt die Bytezahl haben will? * Stringbearbeitung (z. B. Ersetzen von "ä" durch "ö") wird noch mühseliger da ein Zeichen kein Zeichen mehr ist. Auch std::string wird ziemlich unbrauchbar für diesen Zweck. * Was gibt es sonst noch zu beachten? 2. Im Programm wchar_t verwenden und in C++ std::wstring. Scheint wohl das einzig halbwegs vernünftige zu sein, da dann wprintf() usw. wieder funktioniert. Wie sieht ihr das? Gruß, Bernhard
On Thursday 10 February 2005 14:49, Bernhard Walle wrote:
Wie sieht ihr das? ... 2. Im Programm wchar_t verwenden und in C++ std::wstring. Scheint wohl das einzig halbwegs vernünftige zu sein, da dann wprintf() usw. wieder funktioniert.
So. Mit allem anderen wirst Du nur langsam aber sicher wahnsinnig. ;-)
CU
--
Stefan Hundhammer
* Stefan Hundhammer [10.02.2005 15:41]:
On Thursday 10 February 2005 14:49, Bernhard Walle wrote:
Wie sieht ihr das?
....
2. Im Programm wchar_t verwenden und in C++ std::wstring. Scheint wohl das einzig halbwegs vernünftige zu sein, da dann wprintf() usw. wieder funktioniert.
So. Mit allem anderen wirst Du nur langsam aber sicher wahnsinnig. ;-)
Hm, und C++? #include <iostream> #include <iomanip> #include <string> using std::wcin; using std::endl; using std::wcout; using std::string; int main(int, char**) { wstring s; getline(wcin, s); wcout << s << endl; return 0; } funktioniert schonmal nicht um Umlauten. Und in Google habe ich auch absolut nichts brauchbares dazu gefunden. :( Gruß, Bernhard
Hi Bernhard! Bernhard Walle schrieb am 10.02.2005 14:49 :
2. Im Programm wchar_t verwenden und in C++ std::wstring. Scheint wohl das einzig halbwegs vernünftige zu sein, da dann wprintf() usw. wieder funktioniert.
Wie sieht ihr das?
Kleine Anmerkung, falls du portablen Code schreiben willst: MinGW unterstützt keine wchars: http://lists.boost.org/MailArchives/boost-users/msg09334.php Das sollte man als Einschränkung in die Doku eines entsprechenden portablen Projekts einfließen lassen. Gruß, Michael
participants (3)
-
Bernhard Walle
-
Michael Wenger
-
Stefan Hundhammer