Ich hatte kürzlich mit einigen komplexen Problemen zu tun, die mit Unicode-String arbeiten (mit PHP, eine Sprache, die ich ziemlich gut kenne). Die Erweiterung mbstring
funktionierte nicht richtig und wir hatten große Mühe, Unicode-Buchstaben, die mit ASCII-Text ein triviales Problem darstellen, bereits auf verschiedene Arten zu lösen.Gibt es eine zuverlässige Möglichkeit, Unicode-Text groß zu schreiben?
Wenn ich dieses Problem mit ASCII-Text lösen müsste, würde ich wahrscheinlich nur das Zeichen nehmen, prüfen, ob es ein Buchstabe ist und dann zum Beispiel 32 von seinem ASCII-Wert subtrahieren! Aber bis jetzt konnte ich nichts finden, das erklärte, wie das Problem der Großschreibung von Unicode-Text gelöst wurde: Muss ich eine vollständige assoziative Tabelle speichern, um jedes Kleinbuchstabe-Zeichen zu seiner in Verbindung stehenden Großbuchstabenversion zuzuordnen? Ich nehme (und hoffe) ich werde eine riesige NO
hören!
Der Kern der Frage: Gibt es eine Methode, um Kleinbuchstaben in Großbuchstaben (und zurück) korrekt zu konvertieren, wenn Sie mit Unicode-Zeichen arbeiten? Und wenn dies der Fall ist, welche Strategien werden angewendet?
Für diesen Test angenommen, Sie haben keine, aber wirklich jedes Modul zur Verfügung: nein mbstring
, keine iconv
, nichts. Außerdem wird aus Gründen der Einfachheit angenommen, dass das Problem des Erkennens einzelner gelöschter Zeichen vorliegt, und unser String
-Objekt hat ein nextChar()
-Verfahren, das verwendet werden kann, um das nächste Zeichen unabhängig von seiner Bytelänge zu finden. Nehmen wir an, Sie wollen eine Zeichenkette nehmen, mit nextChar()
darüber iterieren und sie für jedes Zeichen möglichst groß schreiben.
Wenn unklar oder in der Notwendigkeit von mehr Informationen einfach kommentieren, werde ich versuchen, Ihre Zweifel zu beantworten, wenn sie nicht sogar größer als meine im Moment;)
Ich denke, das ist in der Tat mit einer Tabelle gemacht, * und * es ist noch schlimmer, weil diese Tabelle abhängig von der Sprache des Textes ist. Ein Beispiel ist, wie auf Türkisch die Großbuchstabe von "i" das gepunktete Kapital "İ" ist. Praktisch denke ich, dass der einzige Weg, dies zu tun, darin besteht, eine Bibliothek zu finden, die das für Sie tun kann. – roeland
Sie könnten Recht haben, ich habe festgestellt, dass es sogar extrem schwierig ist, feste Regeln zu finden! Wenn wir die griechische Sprache (U0391 - U03A9 für Großbuchstaben) verwenden, können wir einer "add 22" -Regel mit Ausnahme von U03A2 folgen, aber wenn wir darüber hinausgehen und zum koptischen Alphabet übergehen, scheinen Zeichen einer Art "add 1" zu folgen ". Ich denke, Unicode bringt mehr Probleme mit sich, bis wir einen Weg finden, damit klüger umzugehen! – PoPeio
Nun, du musst wissen, was du tust. Das Verschieben von Text ist einfach, aber Sie müssen vorsichtig sein, wenn Sie wissen, in welcher Kodierung der Text liegt. Wenn Sie anfangen, Dinge wie Sortieren, Groß- und Kleinschreibung usw. zu tun, sollten Sie einfach eine Bibliothek finden. Es gibt zum Beispiel einen [Wrapper für ICU] (http://us2.php.net/manual/en/book.intl.php). – roeland