 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Achim Domma (Procoders) Guest
|
Posted: Thu Sep 02, 2004 9:14 am Post subject: unicode, locals, facets, ... |
|
|
Hallo,
ich muß mit Unicode umgehen. Zur Konvertierung der Daten z.B. von utf-8
nach wchar würde ich evtl. die Erweiterungen von Dinkumware kaufen.
Allerdings brauche ich auch Funktionen wie isupper und islower. Mir ist
soweit klar, daß ich mir z.B. mit "de_DE" das passende Facet besorgen
kann und damit die Funktion aufrufe. Aber:
Welche Facets gibts? Ist das abhängig von meiner Implementierung? Kann
ich die nachinstallieren? Kann ich zur Laufzeit 'rausfinden, welche
existieren?
Gruß,
Achim
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Sep 03, 2004 10:04 am Post subject: Re: unicode, locals, facets, ... |
|
|
"Achim Domma (Procoders)" <domma (AT) procoders (DOT) net> wrote
| Quote: | ich muß mit Unicode umgehen. Zur Konvertierung der Daten z.B. von utf-8
nach wchar würde ich evtl. die Erweiterungen von Dinkumware kaufen.
Allerdings brauche ich auch Funktionen wie isupper und islower. Mir ist
soweit klar, daß ich mir z.B. mit "de_DE" das passende Facet besorgen
kann und damit die Funktion aufrufe. Aber:
Welche Facets gibts?
|
Was zwangsläufig vorhanden ist, steht genau in Tabelle 52 der Norm: Im
Grob gesagt kannst Du mit collate, ctype, moneypunct, money_get,
money_put, numpunct, num_get, num_put, time_get, time_put und messages
rechnet, mal so, mal in einer _byname Variant, jeweils für char und
wchar_t.
| Quote: | Ist das abhängig von meiner Implementierung?
|
Eine Implementierung kann mehr anbieten. Nicht weniger.
Vielleicht wichtiger: eine Implementierung ist nur gezwungen, sie für
die locale "C" und "" (der gleich "C" sein darf) zur Verfügung zu
stellen.
| Quote: | Kann ich die nachinstallieren?
|
In Prinzip ja. Wie aber hängt von der Implementierung ab.
| Quote: | Kann ich zur Laufzeit 'rausfinden, welche existieren?
|
Nicht portable. Ich weiß z.B., wie man es unter Solaris tut, aber dass
funktionniert sogar nicht mehr unter Linux, ohne von Windows zu
sprechen.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Achim Domma (Procoders) Guest
|
Posted: Mon Sep 06, 2004 9:40 am Post subject: Re: unicode, locals, facets, ... |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
| Quote: | Eine Implementierung kann mehr anbieten. Nicht weniger.
Vielleicht wichtiger: eine Implementierung ist nur gezwungen, sie für
die locale "C" und "" (der gleich "C" sein darf) zur Verfügung zu
stellen.
|
D.h. es muß "de_DE" nicht geben? Was mache ich, wenn ich es aber
trotzdem haben will? Mal angenommen ich brauche unbedingt isupper für
finische Buchstaben? Woher weiß ich, wie das locale heißt und wie bringe
ich meinem C++ Compiler bei, damit umzugehen?
Gruß,
Achim
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Georg Maaß Guest
|
Posted: Mon Sep 06, 2004 6:57 pm Post subject: Re: unicode, locals, facets, ... |
|
|
Achim Domma (Procoders) wrote:
| Quote: | kanze (AT) gabi-soft (DOT) fr wrote:
Eine Implementierung kann mehr anbieten. Nicht weniger.
Vielleicht wichtiger: eine Implementierung ist nur gezwungen, sie für
die locale "C" und "" (der gleich "C" sein darf) zur Verfügung zu
stellen.
D.h. es muß "de_DE" nicht geben? Was mache ich, wenn ich es aber
trotzdem haben will? Mal angenommen ich brauche unbedingt isupper für
finische Buchstaben? Woher weiß ich, wie das locale heißt und wie bringe
ich meinem C++ Compiler bei, damit umzugehen?
|
Gar nicht. Du kannst das daher eigentlich nur in einem Benutzer
geführten System verwenden, wo ein Mensch sich die Locales anssehen muß
und entweder aus einer Liste zur Laufzeit auswählen oder eben über eine
Konfiguration festlegen muß, welches Locale zu verwenden ist. Selbstm
wenn es ein Locale de_DE gäbe, wäre nicht erkennbar, welche Semanti das
hat, d.h. ob dieses Cocale die Regeln für Finnen in Dubai oder was auch
immer enthalten.
Aufgrund der Tatsache das die Namen nicht genormt sind, ist der ganze
Locale-Mechanismus nur sehr selten anwendbar.
--
Georg Maaß - bioshop.de D-76227 Karlsruhe, Westmarkstraße 82
HTML, XML / JavaScript, C++, Java, PHP, VB / CGI, JSP, ASP, ASP.net
- The ultimate DHTML engine: http://gml-modul.sourceforge.net -
http://sourceforge.net/projects/gml-modul
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Tue Sep 07, 2004 8:04 am Post subject: Re: unicode, locals, facets, ... |
|
|
"Achim Domma (Procoders)" <domma (AT) procoders (DOT) net> schrieb:
| Quote: | D.h. es muß "de_DE" nicht geben?
|
Natürlich nicht. Warum sollte ein Chinese sowas installiert haben?
Hast Du /alle/ Locales?
| Quote: | Was mache ich, wenn ich es aber trotzdem haben will?
|
Selber programmieren, Bibliothek mitbringen/voraussetzen ...
| Quote: | Mal angenommen ich brauche unbedingt isupper für
finische Buchstaben? Woher weiß ich, wie das locale heißt und wie bringe
ich meinem C++ Compiler bei, damit umzugehen?
|
C++ allein hilft Dir nicht weiter, Du brauchst weitergehende Garantien
für Dein Zielsystem. SUS oder auch POSIX geben solche. WIN32 hat auch
Regeln für die Benennung, wenn auch gut versteckt.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Achim Domma (Procoders) Guest
|
Posted: Tue Sep 07, 2004 2:04 pm Post subject: Re: unicode, locals, facets, ... |
|
|
Markus Schaaf wrote:
| Quote: | "Achim Domma (Procoders)" <domma (AT) procoders (DOT) net> schrieb:
Was mache ich, wenn ich es aber trotzdem haben will?
Selber programmieren, Bibliothek mitbringen/voraussetzen ...
|
Naja, da ich wohl kaum der erste mit dem Problem bin wird selber
programmieren wohl übertrieben sein. Hast du Vorschläge und Empfehlungen
für Bibliotheken, die was können? Zielsystem ist erstmal Windows mit
VC++ und später evtl. Linux/Unix mit gcc.
| Quote: | Mal angenommen ich brauche unbedingt isupper für
finische Buchstaben? Woher weiß ich, wie das locale heißt und wie bringe
ich meinem C++ Compiler bei, damit umzugehen?
C++ allein hilft Dir nicht weiter, Du brauchst weitergehende Garantien
für Dein Zielsystem. SUS oder auch POSIX geben solche. WIN32 hat auch
Regeln für die Benennung, wenn auch gut versteckt.
|
Hmm ... verrätst du mir, wo die Benennungen versteckt sind, oder muß ich
selbst suchen? Was meinst du mit "C++ allein hilft Dir nicht
weiter"? Willst du damit sagen, daß C++ mir keine Garantie für bestimmte
Locales gibt oder hälst du das System an sich für unbrauchbar?
Verstehe ich dich richtig, daß die Standarbibliothek das i.A. auf
Systemaufrufe mappt? D.h. ich habe warsch. genau die locales zur
Verfügung, die mein Win XP eingebaut hat?
Ich kann auch nochmal pragmatischer fragen: Ich implementiere einfache
Heuristiken um Texte in Wörter und Sätze zu zerstückeln. Dazu brauche
ich Funktionen wie z.B. isupper, islower usw. Da es die Möglichkeit gibt
diese Funktionen sprachabhängig zu bekommen, würde ich diese Möglichkeit
auch gerne nutzen. Daß es Sprachen gibt, in denen z.B. isupper keinen
Sinn macht, ist mir schon klar. Soweit möglich soll das alles in
'sauberem' C++ passieren. Tips, Tricks, Fallstricke zu dem Thema? ;-)
Gruß,
Achim
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Georg Maaß Guest
|
Posted: Wed Sep 08, 2004 7:09 am Post subject: Re: unicode, locals, facets, ... |
|
|
Achim Domma (Procoders) wrote:
| Quote: | Willst du damit sagen, daß C++ mir keine Garantie für bestimmte
Locales gibt
|
Es gibt Dir eine Garantier für genau ein Locale, welches das C Locale ist.
| Quote: | oder hälst du das System an sich für unbrauchbar?
|
Ich halte es für unbrauchbar, weil die Namen nicht genormt sind. Daß
keine Implementierungspflicht besteht, halte ich für unproblematisch,
aber daß die Benamung der Willkür der Implementierer anheimgestellt ist,
macht dieses System selbst auf Quelltextebene unportabel und somit in
den meisten Fällen unbrauchbar.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Wed Sep 08, 2004 9:21 am Post subject: Re: unicode, locals, facets, ... |
|
|
"Achim Domma (Procoders)" <domma (AT) procoders (DOT) net> schrieb:
| Quote: | Naja, da ich wohl kaum der erste mit dem Problem bin wird selber
programmieren wohl übertrieben sein.
|
Kommt drauf an. Selberprogrammieren ist immer noch /das/ Mittel,
definierte Ziele zu erreichen. (Ich schrieb ja nicht, daß Du Dir
den Datenbestand selbst zusammenklauben sollst, oder keine Libs
oder OS-Funktionen benutzt.)
| Quote: | Hast du Vorschläge und Empfehlungen für Bibliotheken, die was
können?
|
Wenn Du mit Unicode zufrieden bist, gibt es was von IBM (ICU),
es gibt die "libiconv" ... Wenn speziell Groß-/Kleinschreibung
das Thema sein soll, würde ich diesbezüglich mal bei unicode.org
lesen; da hat sich in der letzten Version einiges getan.
| Quote: | Zielsystem ist erstmal Windows mit
VC++ und später evtl. Linux/Unix mit gcc.
|
Das schreit förmlich nach einem kleinen Wrapper um system-
spezifische Calls. Immerhin hast Du unter den erwachsenen Microsoft-
Windows-Versionen mindestens Unicode-2-Unterstützung nativ zur
Verfügung.
| Quote: | Hmm ... verrätst du mir, wo die Benennungen versteckt sind, oder muß ich
selbst suchen?
|
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_CRT_Language_Strings.asp
| Quote: | Was meinst du mit "C++ allein hilft Dir nicht weiter"?
Willst du damit sagen, daß C++ mir keine Garantie für bestimmte
Locales gibt
|
Ja.
| Quote: | oder hälst du das System an sich für unbrauchbar?
|
Nun. Gerade die Schnittstelle für Zeichenklassifizierung und
Groß-/Kleinwandlung ist unbrauchbar.
| Quote: | Verstehe ich dich richtig, daß die Standarbibliothek das i.A. auf
Systemaufrufe mappt? D.h. ich habe warsch. genau die locales zur
Verfügung, die mein Win XP eingebaut hat?
|
Bei der "original" Microsoft-Bibliothek wahrscheinlich, bei anderen evtl.
nicht mal das. Oder anders.
| Quote: | Ich kann auch nochmal pragmatischer fragen: Ich implementiere einfache
Heuristiken um Texte in Wörter und Sätze zu zerstückeln. Dazu brauche
ich Funktionen wie z.B. isupper, islower usw.
|
Die Frage ist, woher der Input kommt, ob es reicht, die Möglich=
keiten des OS zu nutzen (sonst wird es schwierig) usw. -- Was
manchmal übersehen wird: Der Locale-Support des OS ist ursprünglich
nur dafür da, die Benutzerschnittstelle des lokalen Rechners zu
unterstützen, also Benutzereingaben richtig zu interpretieren und
Verzeichnis-Listings richtig zu sortieren, das Datum in gängigem
Format anzuzeigen etc. Für all das braucht man eigentlich nur zwei
Locale-Bezeichner: "C" und "" -- insofern ist die C/C++-Welt schon
in Ordnung.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|