Die Anforderung besteht darin, dass sowohl ASCII- als auch Unicode-Zeichenfolgen in Groß- und Kleinschreibung unterschieden werden können. Jede Eingabezeichenfolge wird unter Verwendung von UTF-16LE
codiert und als ein std::basic_string<u_int16_t>
-Datentyp gespeichert. Die Mehrzahl der Vorschläge wies auf die Intensivstation hin, also nahm ich einen Stich.Ermitteln der richtigen Collator-Einstellung in der ICU
Ich schrieb einen Beispielcode ein paar Probe-Eingänge ausprobieren:
#include <iostream.h>
#include "unicode/coll.h"
using namespace icu;
using namespace std;
int main()
{
UErrorCode success = U_ZERO_ERROR;
Collator *collator = Collator::createInstance("UTF-16LE", success);
collator->setStrength(Collator::PRIMARY);
if (collator->compare("dinç", "DINÇ") == 0) {
cout << "Strings are equal" << endl;
} else {
cout << "Strings are unequal" << endl;
}
return 0;
}
Die Saiten in Frage haben türkische Zeichen. Von dem was ich lese, sollte der Zeichenfolgenvergleich fehlschlagen, da sich 'i'
und 'I'
im Zeichensatz unterscheiden, unabhängig davon, ob sie beide Groß- oder Kleinbuchstaben sind. Aber sie werden als gleich angesehen.
Ein paar Fragen:
Sollten die Strings UTF-16 codiert sie auf die Intensivstation zu füttern, bevor sein? Würde das das Problem lösen?
Welche Sortierereinstellungen sind im Allgemeinen ideal für die Unterstützung von Groß- und Kleinschreibung bei UTF-16-codierten Zeichenfolgen? Ich habe gelesen, dass, wenn die Stärke auf PRIMARY und SECONDARY eingestellt ist, es zu einem Vergleich zwischen Groß- und Kleinschreibung kommt. Gibt es noch etwas anderes, das ich vermisse?
Vielen Dank!
Danke! Würde ein Collator mit UTF-16 als Gebietsschema für die meisten anderen Sprachen in der Lage sein, die vier Sprachen zu ignorieren, die Sie erwähnten? – Maddy
Auch dieser [post] (http://stackoverflow.com/questions/2241348/what-is-unicode-utf-8-utf-16) sagt, dass UTF-16 Größe variabel ist und bis zu 4 Bytes gehen kann. Wenn ja, muss der Speicher, der für die Strings benötigt wird, in 'std :: basic_string' oder das Äquivalent geändert werden, richtig? –
Maddy
@Maddy es wäre in der Lage, Gleichheitsvergleiche zu tun, aber Reihenfolge (aka Collation) variiert viel von Sprache zu Sprache, also nein. Ändern Sie auch nicht Ihre Saiten. UTF-16 verwendet 16-Bit-Einheiten. –