2012-03-25 4 views
1

Ich spiele mit ICU und versuche, einige Klassen um es zu schreiben. Einer von ihnen repräsentiert einen Codepunkt. Während ich im Begriff bin, einen Konstruktor zu schreiben, der eine Nummer erhält, möchte ich überprüfen, ob diese Nummer als Codepunkt gültig ist.Überprüfen der Gültigkeit einer Nummer als Codepunkt in ICU

Leider konnte ich keinen Weg auf der ICU finden, um die Gültigkeit einer bestimmten UChar32 zu überprüfen, die eine Codeeinheit darstellt. ICU gibt diesen Typ in einigen Funktionen zurück und akzeptiert solche UChar32 in einigen Funktionen, aber wie kann es sicher sein, dass wir ihnen keinen ungültigen Wert geben werden?

Ich denke, es muss irgendwo eine Gültigkeitsprüfung stattfinden. Irgendeine Idee?

+0

Warum tun Sie benötigen eine Klasse, um einen Codepunkt darzustellen? –

+0

Sie könnten versuchen, es zu normalisieren und sehen, ob das gelingt. Es sollte für einen Nicht-Unicode-Wert fehlschlagen. –

+0

Ich brauche die Klasse nicht auf Nachfrage, denn jetzt ist es nur eine allgemeine Klasse mit verwandten Funktionen wie u_charDigitValue, u_getNumericValue, u_charName, u_isIDStart, etc ... – csjpeter

Antwort

1

Verpasste diese vorher.

#include <unicode/uchar.h>

  • Gültig (in-Unicode) UChar32 s zwischen UCHAR_MIN_VALUE und UCHAR_MAX_VALUE einschließend seiner
  • Assigned (im Gegensatz zu nicht zugeordneten gegen) UChar32 s falsch evaulate für (u_charType(ch) != U_UNASSIGNED)
+0

> U_UNASSIGNED \t > Siehe Hinweis !!. > Kommentare der Form "Cn" werden von genpname gelesen. Nicht-Kategorie für nicht zugewiesene und Nicht-Zeichen-Codepunkte. – csjpeter

+0

Schöne Idee. Vielen Dank! Die Dokumentation sagt jedoch: "U_UNASSIGNED \t: Kommentare der Form" Cn "werden von genpname gelesen. Nicht-Kategorie für nicht zugewiesene und nicht-Zeichen-Code-Punkte.". Dieser Trick ist also gut, um zu überprüfen, ob die UChar32-Nummer ein Unicode-Zeichen darstellt, aber nicht für Nicht-Zeichen-Codepunkte. – csjpeter

+0

"Die ungültigen Codepunkte sind: Werte außerhalb des zulässigen Bereichs (kleiner als Null oder größer als 10FFFF), nicht erhallte Ersatzwerte (D800 bis DF00) und Nicht-Zeichenwerte (in der Form xxFFFF oder xxFFFE)." Ich habe das Gefühl, meine Antwort war falsch. Das Nicht-Zeichen ist auch ein illegaler Wert, basierend auf dieser Dokumentation. – csjpeter

Verwandte Themen