Wie passt man Unicode-Zeichen mit boost :: spirit?

8

Wie kann ich utf8 Unicode-Zeichen mit boost::spirit ?

vergleichen?

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:

%Vor%

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?

    
Frank 06.05.2012, 21:45
quelle

3 Antworten

5

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:

  • wchar Unterstützung
  • utree-Attribute ( noch experimentell)
  • s-Ausdrücke

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)

    
sehe 07.05.2012, 07:31
quelle
1

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?

    
ybungalobill 06.05.2012 22:14
quelle
0

In Boost 1.58 kann ich alle Unicode-Symbole damit abgleichen:

%Vor%

Ich weiß nicht, wie man einen bestimmten Bereich von Unicode-Symbolen definiert.

    
Sergey 06.10.2016 20:23
quelle

Tags und Links