2016-09-20 11 views
7

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?

+0

Sieht aus wie ein Fehler. – nwellnhof

Antwort

Verwandte Themen