Wie speichert ihr eure Strings?
Verfasst: 26.03.2011, 14:49
Moin Leute
Die Vorgeschichte:
Eigentlich wollte ich nur Umlaute darstellen. Das hat dann dazu geführt, dass ich mich mit Unicode beschäftigt habe (ok, Umlaute kann man auch mit Latin-1 (ISO-8859-1) darstellen, aber wenn, dann richtig :) ). Irgendwann habe ich mich dann für UTF-8 als interne Darstellung entschieden und hab UTF8-CPP für Konvertierungen benutzt.
Das ging so lange gut, bis ich Strings vergleichen wollte, denn man kann zwar theoretisch zwei UTF-8 Strings mit strcmp() vergleichen, jedoch kann ein Zeichen auf mehr als eine Weise kodiert werden, wofür strcmp() aber nicht ausgelegt ist. Aus diesem Grund müssen die Strings zuerst in eine einheitliche Form gebracht (normalisiert) werden, anschließend kann dann nach belieben verglichen werden.
So kann man zwei Strings zwar auf Gleichheit prüfen, dass bedeutet aber noch lange nicht, dass man sie auch Sortieren kann (und der Sortiervorgang ist auch noch von Sprache zu Sprache verschieden :( )
Die einzige Lib, die ich gefunden habe und das (und noch vieles mehr) anbietet, ist ICU. Die war mir dann allerdings zu Umfangreich (ich will doch bloß ein paar Strings vergleichen), also hab ich mir gedacht, dass ich mir das einfach selbst schreibe (zum Glück ist Programmieren 'nur' ein Hobby, und ich kann machen was ich will, auch wenns vollkommen unwirtschaftlich ist).
Das Projekt wird langsam aber ziemlich groß, und ich dachte bevor ich mich hier in irgendwas verrenne, frage ich mal, wir ihr es so handhabt.
Die Fragen:
Um mal die Frage ein bisschen zu verfeinern:
Die Vorgeschichte:
Eigentlich wollte ich nur Umlaute darstellen. Das hat dann dazu geführt, dass ich mich mit Unicode beschäftigt habe (ok, Umlaute kann man auch mit Latin-1 (ISO-8859-1) darstellen, aber wenn, dann richtig :) ). Irgendwann habe ich mich dann für UTF-8 als interne Darstellung entschieden und hab UTF8-CPP für Konvertierungen benutzt.
Das ging so lange gut, bis ich Strings vergleichen wollte, denn man kann zwar theoretisch zwei UTF-8 Strings mit strcmp() vergleichen, jedoch kann ein Zeichen auf mehr als eine Weise kodiert werden, wofür strcmp() aber nicht ausgelegt ist. Aus diesem Grund müssen die Strings zuerst in eine einheitliche Form gebracht (normalisiert) werden, anschließend kann dann nach belieben verglichen werden.
So kann man zwei Strings zwar auf Gleichheit prüfen, dass bedeutet aber noch lange nicht, dass man sie auch Sortieren kann (und der Sortiervorgang ist auch noch von Sprache zu Sprache verschieden :( )
Die einzige Lib, die ich gefunden habe und das (und noch vieles mehr) anbietet, ist ICU. Die war mir dann allerdings zu Umfangreich (ich will doch bloß ein paar Strings vergleichen), also hab ich mir gedacht, dass ich mir das einfach selbst schreibe (zum Glück ist Programmieren 'nur' ein Hobby, und ich kann machen was ich will, auch wenns vollkommen unwirtschaftlich ist).
Das Projekt wird langsam aber ziemlich groß, und ich dachte bevor ich mich hier in irgendwas verrenne, frage ich mal, wir ihr es so handhabt.
Die Fragen:
Um mal die Frage ein bisschen zu verfeinern:
- Benutzt ihr Unicode (UTF-8, UTF-16, UTF-32), wchar_t oder einfach ASCII kodierte Strings?
- Benutzt ihr für Unicode irgendeine externe Bibliothek? Eine (eigene) String-Klasse?