Eine naive Zählung ergibt 8.
Persönlich liebe ich ja Raku, auch weil alles mit Unicode da von Haus aus so funktioniert wie es soll:
$ echo 'ich👩🏻🛒💂🏻♀️iel' | raku -ne 'say .chars' 9Aber danke für die gute Erklärung oben!
Wusstet ihr, dass man Bildschriftzeichen kombinieren kann?

Heißt das, es braucht gar kein Erbrechmodifizierer? https://xkcd.com/1813/
Unter welchem OS?
Vermutlich unter keinem.
Aber prinzipiell kann man beliebige Bilder mit dem Zero-width joiner (
0x200D) zusammenkleben.https://blog.emojipedia.org/emoji-zwj-sequences-three-letters-many-possibilities/
Bzw unter jedem OS und in jedem Programm kann man dies anfragen mit dem ZWJ, aber das ist halt Implementierungsabhängig ob da irgendwas passiert.
Damit hatte Micro$lop zwischenzeitlich die Ninja-Katze/Okto-Katze oder die (irgendwas mit GitHub, Ninja und Raketen) in windows ermöglicht. Aber das galt halt nicht automatisch für alle anderen Programme die auf windows liefen 😑.
Hier hab ich das per Zufall gelernt. Kann ich sehr empfehlen: https://tonsky.me/blog/unicode/
Acht? Warum?
Kann dir jetzt nicht die genaue Zahl erklären, aber viele Emojis setzen sich aus mehreren Zeichen zusammen. Der 👩🏻-Emoji setzt sich zum Beispiel vermutlich so irgendwie zusammen: 🧑♀️🏻
Zwischen den Einzelemojis müssen nochmal weitere Zeichen sein, damit sowas kombiniert werden kann, sogenannte “Zero-Width Joiner”: https://en.wikipedia.org/wiki/Zero-width_joiner
Also je nach Zählweise könnte das 👩🏻-Emoji eben 1 Zeichen oder 3 Zeichen oder 5 Zeichen sein.
Und dabei lasse ich jetzt noch außen vor, dass manche Programmiersprachen die Bytes zählen, um die vermeintliche Anzahl der Zeichen zu bestimmen, was dann nochmal deutlich mehr sind.
Absurd, danke.
Wir reden von diesem Post: https://feddit.org/post/21517777
Die Sprache meiner Wahl ist JavaScript. Ich habe in
_tden Teil des Titels geladen, der nicht „ich” oder „iel“ ist. Zuerst fällt auf, dass die Längenangabe von JavaScript völlig nutzlos ist:_t.length > 13Wie kommt das Zustande? @Ephera@lemmy.ml kommt der Sache schon nahe. JS benutzt intern 16-bit-Zeichen und zählt die, um die Länge dieses Strings zu ermitteln. Die Emoji in dem Titel haben aber teilweise eine Repräsentation, die mehr als 16 Bit braucht. Schauen wir uns die Unicode Code Points von
_tan:[..._t].map(c => `${c} (0x${c.codePointAt(0).toString(16)})`) > ['👩 (0x1f469)', '🏻 (0x1f3fb)', '🛒 (0x1f6d2)', '💂 (0x1f482)', > '🏻 (0x1f3fb)', ' (0x200d)', '♀ (0x2640)', '️ (0xfe0f)']Alles, was größer ist als
0xFFFFpasst nicht in ein 16-bit-Zeichen. Das sind die ersten 5 Zeichen. Die zählen also für die Länge doppelt. So kommt zumindest JavaScript auf 13.Aber wir wollen ja nicht die Anzahl der 16-bit-Zeichen zählen. Also weiter im Text. Im letzten Code-Block siehst du schon, dass es 8 Unicode-Codepunkte sind, die dieser String repräsentiert. Das ist meine „naive” Zählung. Aber die ist natürlich auch falsch.
Unicode erlaubt sogenannte Modifier an Emoji. Das zweite Zeichen (0x1f3fb) wird nicht selbst angezeigt, sondern verändert nur das vorangegangene Zeichen. In dem Fall macht es aus dem generischen “Woman Emoji” eine hellhäutige Frau. Das ist so ähnlich wie mit Akzent-Zeichen. Wenn auf ein „`“ ein „a“ folgt, sind das auch nicht zwei Zeichen, sondern das Zeichen „à“. Modifier darf man also nicht zählen. Dadurch fallen schon einmal 2 Codepunkte weg. Wir haben also jetzt eine hellhäutige Frau, einen Einkaufswagen und eine hellhäutige Wache. Was geht jetzt bei den letzten drei Zeichen ab?
0x200d ist ein Arschloch. Es handelt sich um den Zero Width Joiner (ZWJ). Der hat den Effekt, dass das nächste Zeichen, selbst wenn es eigentlich alleine stehen könnte, mit dem vorherigen kombiniert wird. Wir haben als nächstes Zeichen den Spiegel der Venus. Der ZWJ sorgt nun dafür, dass der auch nicht angzeigt wird, sondern wie ein Modifier auf die hellhäutige Wache wirkt. Die wird dadurch zur weiblichen, hellhäutigen Wache. Weder der ZWJ noch das zum Modifier erklärte Zeichen dürfen gezählt werden.
Es bleibt das letzte Zeichen, 0xFE0F. Wenn man Unicode fragt, sagen die einem, dass das der Variant Selector 16 ist. Variant Selectors kommen nur in asiatischen Sprachen vor. Da kann es für dasselbe Zeichen mehrere verschiedene Arten geben, es zu schreiben, die die Bedeutung des Zeichens aber nicht verändern. Die Variant Selectors erlauben es dem Schreiber eines Textes, zu bestimmen, wie ein Zeichen zu malen ist.
Emoji haben diese Variant Selectors gekapert. Variante 15 sorgt dafür, dass ein Zeichen, das eigentlich ein Emoji ist (d.h. bunt angezeigt wird), wie eine Text-Glyphe dargestellt wird. Aus
wird so ♥. Variante 16 (die wir hier vorliegen haben) macht das Gegenteil und sorgt dafür, dass ein „normales” Zeichen emojisiert (bunt) wird.Anscheinend (ich bin mir wirklich nicht sicher, weil der Unterschied nur ca. 6 Pixel sind) muss der Spiegel der Venus emojisiert werden, damit der ZWJ ihn an die Wache kleben kann. Hier der Vergleich: 💂🏻ohne den Variantenselektor; 💂🏻♀️ mit).
Was zählt, ist aber dass die Variantenselektoren auch niemals abgebildet werden und deshalb nicht als Bildzeichen zählen.
So werden aus 13 Doppelbytes 8 Zeichen und 3 Bilder.
Acht meine Eier haaaaaha
Dann muss man halt UTF-32 verwenden.
Aber die 8 Vereintkodierungskodepunkte ergeben nur 3 Schreibdingsklumpen und darauf kommt es doch im Titel an, oder?
Ja. Das rauszufinden ist ja der Witz.



