Mein Verständnis von .chars
ist, dass es "the number of characters in the string in graphemes" zurückgibt. Mein Verständnis von .ords
ist, dass es "a list of codepoint numbers, one for the base character of each grapheme in the string" zurückgibt. Das heißt, .chars
gibt die Anzahl der Grapheme zurück und .ords
gibt einen Codepunkt (die Basis) pro Graphem zurück. Allerdings scheint das Verhalten, das ich in Rakudo 2016.07.01 auf MoarVM sehe 2.016,07 nicht übereinstimmen:Warum stimmen .ords nicht mit .chars überein?
> "\x[2764]\x[fe0e]".chars
1
> "\x[2764]\x[fe0e]".ords.fmt("U+%04x")
U+2764 U+fe0e
> "e\x[301]".ords.fmt("U+%04x")
U+00e9
> "0\x[301]".ords.fmt("U+%04x")
U+0030
Die .chars
Methode gibt die 1 für den HEAVY BLACK HEART und VARIATION SELECTOR-15 (Textdarstellung erwarten ❤︎ statt emoji ❤️, U + 2764 U + fe0f), aber dann .ords
gibt beide Codepunkte und nicht nur die Basis zurück (ich erwartete nur U + 2764). Noch verwirrender, wenn Sie .ords
auf LATEIN KLEINEN BRIEF E anrufen und ACUTE ACCENT KOMBINIEREN, erhalten Sie zurück U + 00e9 (LATEIN KLEINER BRIEF E MIT AKUTE). Ich habe U + 0065 erwartet, da LATIN SMALL LETTER E der Basiscodepunkt ist. Ich bekomme das erwartete Ergebnis zurück, wenn keine NFC-Version der Zeichenfolge vorhanden ist (z. B. U + 0030 für 0).
Ist mein Verständnis von .chars
und .ords
nur fehlerhaft, oder ist das ein Fehler?
Sieht aus wie ein Fehler. – nwellnhof