Wie kann ich utf8 Unicode-Zeichen mit boost::spirit
?
Ich möchte zum Beispiel alle Zeichen in dieser Zeichenfolge erkennen:
%Vor% Wenn ich dieses einfache boost::spirit
-Programm versuche, stimmt es nicht mit den Unicode-Zeichen überein:
Es verhält sich so:
%Vor%UPDATE:
Okay, ich habe ein bisschen mehr daran gearbeitet, und der folgende Code funktioniert irgendwie. Es konvertiert zuerst die Eingabe in einen Iterator von 32-Bit-Unicode-Zeichen (wie hier empfohlen ) ):
%Vor%Der Code gibt die Unicode-Codepunkte aus:
%Vor%was laut der offiziellen Unicode-Tabelle korrekt zu sein scheint
Kann mir nun jemand sagen, wie man stattdessen die tatsächlichen Zeichen mit diesem Vektor von Unicode-Codepunkten drucken soll?
Ich habe nicht viel Erfahrung damit, aber anscheinend unterstützt Spirit (SVN trunk version) Unicode.
%Vor%Siehe z. das sexpr-Parser-Beispiel in der Schema-Demo.
%Vor%Ich glaube, dass dies auf der Demo von einer Präsentation von Bryce Lelbach 1 basiert, die spezifisch zeigt:
Es gibt einen Online-Artikel über S-Ausdrücke und Varianten .
1 Falls es tatsächlich so ist, hier ist das Video von dieser Präsentation und die Folien (pdf) wie gefunden hier (odp)
Sie können nicht. Das Problem ist nicht in boost :: spirit, aber das Unicode ist kompliziert . char
bedeutet kein Zeichen, sondern ein 'Byte'. Und selbst wenn Sie auf der Codepunkt-Ebene arbeiten, kann immer noch ein vom Benutzer wahrgenommener Charakter durch mehr als einen Codepunkt repräsentiert werden. (z. B. пустынных ist 9 Zeichen, aber 10 Codepoints. Es ist vielleicht nicht klar genug in Russisch, weil es keine diakritischen Zeichen ausgiebig verwendet. Andere Sprachen tun dies.)
Um tatsächlich über den vom Benutzer wahrgenommenen Charakter (oder Graphem-Cluster in der Unicode-Terminologie) zu iterieren, müssen Sie eine spezialisierte Unicode-Bibliothek verwenden, nämlich ICU.
Was ist jedoch die reale Verwendung der Iteration über die Zeichen?
Tags und Links c++ parsing boost boost-spirit