Emoji unter der Haube

Bild




In den letzten Wochen hat Nikita Prokopov die Emoji-Unterstützung für Skija implementiert . Er beschloss, ein paar kleine Details darüber zu teilen, wie diese "größte Innovation in der menschlichen Kommunikation seit der Erfindung des Briefes Bild" unter der Haube funktioniert.



Anmerkung des Übersetzers: Habr unterstützt kein Emoji, daher musste ich aussteigen und Emoji durch Bilder ersetzen.



Unicode



Jedes Zeichen auf einem Computer ist mit einer Nummer codiert. Die beliebteste Codierung ist Unicode, und die beiden häufigsten Untervarianten sind UTF-8 und UTF-16.



Unicode weist 2 21 (2 Millionen) Zeichen zu, die als "Codepunkte" bezeichnet werden. Von diesen zwei Millionen sind derzeit nur ~ 150.000 Zeichen definiert. Alle Sprachen, tot und lebendig, und andere Dekorationen waren in diese 150.000 Symbole eingepfercht. Sie können verschiedene Schriftarten verwenden, um rückwärts und verkehrt herum zu schreiben: und Bildum «GHz» als einzelne Glyphe anzuzeigen : Bild. Nach



rechts gerichtet Doppelpfeil mit Federn und zwei vertikalen Linien: Bildoder Semiglazov Monster : Bild. Und die Ente:



Bild




Achten Sie auf den Block mit ägyptischen Hieroglyphen (U + 13000 - U + 1342F), es gibt viele interessante Dinge:



Bild




Grundlegendes Emoji



Emoji sind nur Unicode-Zeichen, die sich hier U + 1F300-1F6FF und hier U + 1F900-1FAFF befinden:



Bild




Emoji verhält sich wie gewöhnliche Buchstaben, Sie können alle Operationen mit ihnen ausführen, wie mit Buchstaben ( ca. übersetzt: nur nicht auf Habré! ). Wenn Sie "A" eingeben, sieht der Computer U + 0041. BildWährend der Eingabe sieht der Computer U + 1F335.



Emoji sind Schriftarten



Warum werden sie als Bilder angezeigt? Bitmap-Schriftarten. Sie können lustige PNG für Glyphen erstellen, anstatt langweilige Schwarz-Weiß-Vektoren zu erstellen.



Bild



Jedes Betriebssystem verfügt über eine vorinstallierte Emoji-Schriftart. Unter macOS / iOS ist dies das Apple Color Emoji. Windows - Segoe UI Emoji, Android - Noto Color Emoji.



Emojis sehen wie Schriftarten auf verschiedenen Geräten unterschiedlich aus. Einige Anwendungen haben ihre eigenen Emoji: WhatsApp, Twitter, Facebook.



Bild



Fallback-Schriftarten



Sie schreiben den Text in einer Schriftart. Wie passt das Emoji dort hin? Und warum sieht der russische Text im Clubhaus oder auf Medium schlecht aus?



Bild




Hier geben Sie das Zeichen U + 1F419 ein und Ihre Schriftart ist beispielsweise San Francisco. Die Schriftart in San Francisco enthält jedoch keine Glyphe für U + 1F419. Daher sucht Ihr Betriebssystem nach einer anderen Schriftart mit einer solchen Glyphe.



U + 1F419 ist nur in Apple Color Emoji verfügbar. Sie sehen also : Bild.

Unabhängig davon, welche Schriftart Sie verwenden, sehen Emojis gleich aus.



Bild




Variationswähler-16



Einige Emojis entstanden 1993 in Form von Symbolen in den Abschnitten Verschiedene Symbole U + 2600-26FF oder Dingbats U + 2700-27FF:



Bild




Diese Glyphen sind wie Buchstaben, schwarz und weiß. Viele Schriftarten haben ihre eigenen Bild(U + 2702 BLACK SCISSORS):



Bild




Apple Color Emoji hat eine eigene Version:



Bild




Woher weiß das Betriebssystem, was angezeigt werden soll Bildoder Bildob es denselben U + 2702-Code hat?



Treffen Sie U + FE0F, auch bekannt als VARIATION SELECTOR-16. Dies ist ein Hinweis für den Textrenderer, auf Emoji umzuschalten.



Bild




Einfach, elegant und ohne Notwendigkeit, neue Codepunkte hervorzuheben. Bildhaben die gleiche Bedeutung , aber einen etwas anderen Bildstil.



Graphemcluster



Hier stehen wir vor einem anderen Problem - unsere Emoji sind jetzt nicht ein Codepunkt, sondern zwei. Dies bedeutet, dass wir einen Weg brauchen, um die Grenzen des Symbols zu definieren.



Eine Gruppe von Graphemen wird uns helfen. Ein Graphemcluster ist eine Folge von Codepunkten, die als einzelne vom Menschen lesbare Glyphe betrachtet wird.



Graphemcluster wurden nicht nur für Emojis erfunden, sondern gelten auch für reguläre Alphabete. BildIst ein einzelner Cluster von Graphemen, auch wenn er aus zwei Codepunkten besteht: U + 0055 UPPER-CASE U gefolgt von U + 0308 KOMBINIERENDE DIAERESE.



Graphemcluster sind für Programmierer sehr komplex. Das kannst du nicht einfach machen substring(0, 10)



Um die ersten 10 Zeichen zu nehmen, können Sie das Emoji in zwei Hälften teilen.



Die Umkehrung der Linie muss geschickt gemacht werden. U + 263A U + FE0F ist sinnvoll, U + FE0F U + 263A jedoch nicht.



Bild




Schließlich können Sie nicht einfach einen .length



String aufrufen . Nun, Sie können, aber das Ergebnis wird Sie überraschen. Wenn Sie Entwickler sind, versuchen Sie, es Bildin Ihrer Browserkonsole auszuführen.



Programmiertipp: Wenn Sie mit Text arbeiten, erstellen Sie eine Bibliothek, die sich auf Graphemcluster konzentriert. Für C, C ++ und JVM kann es sich um eine Intensivstation handeln . Swift macht standardmäßig alles richtig, für andere - machen Sie es selbst.



Bild




Dieses Ding ist 65 lang und kann nicht geteilt werden. Lebe jetzt damit.



Hautton-Modifikator



Die meisten menschlichen Emojis zeigen eine abstrakte gelbe Person. Als 2015 ein Hautton hinzugefügt wurde, wurden anstelle eines neuen Codepunkts für jede Kombination aus Emoji und Hautton nur fünf neue Codepunkte hinzugefügt: U + 1F3FB..U + 1F3FF.



Sie sollten nicht für sich allein verwendet, sondern hinzugefügt werden vorhandenes Emoji ... Zusammen bilden sie eine Ligatur: Wenn wir drucken Bild(U + 1F44B WAVING HAND SIGN) und dann (U + 1F3FD MEDIUM SKIN TONE MODIFIER), erhalten wir, dass es Bild



Bildkeinen eigenen Codepunkt hat (dies ist eine Folge von zwei: U + 1F44B U + 1F3FD), hat aber ein einzigartiges Erscheinungsbild. Insgesamt wurden mit Hilfe von fünf Modifikatoren ~ 280 menschliche Emojis in 1680 Variationen umgewandelt. Hier sind einige Tänzer:



Bild




Tischler ohne Breite



Nehmen wir an, Ihre Freundin hat Ihnen gerade ein Foto von einem Apfel geschickt, den sie in ihrem Garten anbaut. Sie müssen antworten - wie? Sie können BildWOMAN EMOJI (U + 1F469) mit dem angebrachten Reisblock (U + 1F33E) senden Bild. Am Ende wird es funktionieren Bild, aber wenn Sie U + 200D zwischen sie schlagen, erhalten Sie einen Landwirt: Bild



U + 200D heißt Zero-width Joiner, kurz ZWJ. Es funktioniert ähnlich wie das, was wir mit dem Hautton gesehen haben, aber dieses Mal können Sie zwei in sich geschlossene Emojis zu einem kombinieren. Nicht alle Kombinationen funktionieren, aber viele, manchmal auf überraschende Weise!



Einige Beispiele:



Bild




Eine seltsame Inkonsistenz, die mir aufgefallen ist, ist, dass die Haarfarbe über ZWJ erfolgt, während der Hautton nur ein Emoji-Modifikator ohne ZWJ ist. Warum? Ich habe keine Ahnung.



Bild




Leider sind einige Emojis nicht als Kombinationen mit ZWJ implementiert. Ich halte dies für eine verpasste Gelegenheit:



Bild




Wie drucke ich ZWJ? Auf keinen Fall. Aber Sie können es von hier kopieren: "". Hinweis: Dies ist ein Sonderzeichen. Erwarten Sie daher, dass es sich seltsam verhält. Du siehst ihn nicht, aber er ist es. ( Anmerkung per: im Originalartikel gibt es, aber Habr erlaubt nicht )



Ein weiterer großer Bereich, in dem ZWJ auf einem Pferd ist, ist die Konfiguration von Familien und Beziehungen. Hier ist eine kurze Geschichte zur Veranschaulichung:



Bild




Flaggen



Länderflags sind Teil des Unicode-Standards, werden jedoch aus irgendeinem Grund unter Windows nicht implementiert. Wenn Sie dies in einem Windows-Browser lesen - sorry!



Flags haben keine dedizierten Codepunkte. Stattdessen handelt es sich um Zwei-Buchstaben-Ligaturen.



Bild




Links - Windows, rechts - Mac



Richtig, sie verwenden keine echten Buchstaben. Stattdessen wird das Alphabet „Regional Indikator Symbol Buchstabe“ (U + 1F1E6..1F1FF) verwendet. Diese Buchstaben werden nur zum Erstellen von Flags verwendet.



Was passiert, wenn Sie zwei zufällige Buchstaben zusammenfügen? Nicht viel: Bild(außer dass sich die Textbearbeitung merkwürdig verhält).



Wenn Sie experimentieren möchten, können Sie dieses Alphabet kopieren und kombinieren: Bild



Es gibt 258 gültige Kombinationen aus zwei Buchstaben. Kannst du sie alle finden?



Ein lustiger Nebeneffekt der Zwei-Buchstaben-Ligatur: Bild



Sequenzen von Tags



Zwei-Buchstaben-Ligaturen sind cool, aber willst du nicht cooler sein? Wie wäre es mit 32 Buchstabenligaturen? Hier sind die Tag-Sequenzen.



Eine Tag-Sequenz ist eine Sequenz aus regulären Emoji, gefolgt von einer anderen Art lateinischer Buchstaben (U + E0020..E007E), die mit U + E007F CANCEL TAG endet.



Sie werden derzeit nur für diese drei Flaggen verwendet: England, Schottland und Wales:



Bild




Tastenkappen



Nicht besonders aufregend, aber der Vollständigkeit halber notwendig: Keycaps-Sequenzen verwenden eine andere Konvention.



Es sieht so aus: Nehmen Sie eine Zahl * oder #, verwandeln Sie sie mit U + FE0F in ein Emoji und wickeln Sie sie mit U + 20E3 COMBINING ENCLOSING KEYCAP in ein Quadrat ein



Bild




Es gibt 12 von ihnen:



Bild




Unicode-Updates



Unicode wird jedes Jahr aktualisiert und Emoji sind ein zentraler Bestandteil jeder Version. Beispielsweise wurden in Unicode 13 (März 2020) 55 neue Emojis hinzugefügt.



Zum Zeitpunkt dieses Schreibens unterstützen weder das neueste Mac OS (11.2.3) noch iOS (14.4.1) Emoji vom Typ Unicode 13: Folgendes Bild



sehe ich im März 2021: Bild



Aber dank der Magie von ZWJ kann ich es immer noch zu verstehen, was passiert, ist einfach nicht optimal.



Fazit



Zusammenfassend gibt es sieben Möglichkeiten, Emoji zu codieren:



  1. Einzelner Codepunkt Bild
  2. Einzelner Codepunkt + Variationswähler-16 Bild
  3. Hautton-Modifikator Bild
  4. Sequenzierung mit einem Joiner mit einer Breite von Null Bild
  5. Flaggen Bild
  6. Reihenfolge der Tags Bild
  7. Tastenkappenfolge Bild


Methoden von 1 bis 4 können kombiniert werden, um einen ziemlich komplexen Beitrag zu erstellen:



Bild




Wenn Sie Programmierer sind, denken Sie daran, die ICU-Bibliothek immer zu verwenden für:



  • Extraktion von Teilstring
  • Linienlängenmessungen
  • Reverse String


Das Google-Schlüsselwort lautet "Grapheme Cluster". Dies gilt für Emojis, westliche Diakritika, induzierte und koreanische Schriftarten. Seien Sie also bitte vorsichtig.



Bild








Bild



Stellenangebote
, , , - .



, , , .



, , . , , , , , .



, , .







Über ITELMA
- automotive . 2500 , 650 .



, , . ( 30, ), -, -, - (DSP-) .



, . , , , . , automotive. , , .


Liste nützlicher Veröffentlichungen zu Habré



All Articles