• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] Besondere Unicode-Zeichen unter dem X Window System

MH1962

Member
Obwohl ich mich nun gar nicht für einen Linux-Anfänger halte, gibt es ein Thema, wo ich immer einen großen Bogen drum gemacht habe und das sind Fonts und Kodierungen. Hat ja auch (fast) immer problemlos funktioniert, ohne dass man was tun musste. Bis jetzt...

Seit ca. einem Jahr beobachte ich den Trend, dass in E-Mails und auf Webseiten zunehmend besondere Unicode-Zeichen benutzt werden, die eigentlich grafische Symbole sind, wie eine Sonne, eine Erdkugel usw. Beispiel: 🌎

Unter Windows werden die problemlos dargestellt, unter Opensuse anscheinend NICHT. In Seamonkey erscheint einfach ein Kasten mit dem Hexcode des Unicode-Characters drin (wenn man genau hinschaut...), in der KDE-Konsole nur ein Kasten und wenn man den wieder weg löschen will, gibt es ganz kuriose Effekte.

Nachdem ich jetzt eine Mail erhalten habe, in denen manche Wörter fehlen und stattdessen die entsprechenden Unicode-Grafik-Symbole verwendet werden, wird es mir nun doch zu bunt. :D

Daher die Frage: Gibt es unter Linux Fonts, die diese Zeichen darstellen können? Oder liegt das Problem noch irgendwo anders, im Locale oder so? Oder ist das Problem unter Linux völlig unlösbar?
 
OP
M

MH1962

Member
Ha, das ist ja spaßig! Hier im Forum wird der Unicode-Character angezeigt!

Handelt es sich also um ein Codierungs-Problem auf den Webseiten, die ihn nicht anzeigen? Aber warum wird dann in dem Fall der "Kasten" mit dem Hexcode angezeigt???
 
OP
M

MH1962

Member
Scheint wohl eher so zu sein, dass das Forum den Unicode-Character durch eine Grafik ersetzt?!
 
Als erstes solltest Du mal gucken was "echo $LANG" bei dir ausgibt. Wenn es "de_DE.utf8" ist, sollte zumindest von dieser Seite aus Alles gut sein. Dann muß dein Programm auch noch auf einen font zugreifen können das eine grafische Darstellung des gewünschten Zeichens enthält. Diese Wikipedia-Seite mag als Einstieg dienen.
Und dann bleibt noch die Möglichkeit das der Versender evtl. kein gültiges UTF-8 Zeichen verwendet sondern mehr so etwas wie smilies, sprich es wird etwas willkürliches verwendet das nur das gleiche Programm auch wieder vernünftig darstellen könnte. Das wäre dann letztlich das was das Forum macht, nur das das die Interpretation nicht deinem Browser überläßt sondern selbst schon eine Zeichenkombination gegen eine Grafik austauscht.
 

josef-wien

Ultimate Guru
Nach der Beschreibung denke ich an https://wiki.selfhtml.org/wiki/CSS/Eigenschaften/Schriftformatierung/@font-face. Das Herunterladen kann sowohl in den browser-Einstellungen (siehe z. B. https://www.privacy-handbuch.de/handbuch_21q.htm) als auch in NoScript deaktiviert sein.

Wie im zweiten link erwähnt, kann dieser (teilweise sogar lizenzpflichtige) Design-Schwachsinn für Angriffe auf das Betriebssystem mißbraucht werden. Die gebräuchlichsten kostenlosen Dinger (entypo-fonts, fontawesome-fonts, lonote) habe ich mir vor längerer Zeit von Fedora geholt und auf meine Festplatte verfrachtet, im browser heruntergeladen wird so etwas bei mir nicht.



MH1962 schrieb:
Nachdem ich jetzt eine Mail erhalten habe, in denen manche Wörter fehlen und stattdessen die entsprechenden Unicode-Grafik-Symbole verwendet werden, wird es mir nun doch zu bunt.
Schicke den Unsinn zurück, und verlange vom Absender etwas Ordentliches.
 
OP
M

MH1962

Member
Das Problem ist gelöst.

Ich konnte recherchieren, dass diese grafischen Unicode-Zeichen "Emoji" genannt werden.

Ich habe dann gesucht, ob es Pakete gibt, die "emoji" im Namen haben und habe noto-emoji, ein Font-Paket, gefunden. Also habe ich es installiert, und siehe da, die meisten der Symbole sind sichtbar. Zwar nur schwarz-weiß und nicht farbig wie unter Windows, aber ich bin ja nicht Ästhet, sondern will nur wissen, was gemeint ist, und das geht jetzt. :D

Danke für die Tipps, die mich in die richtige Richtung gewiesen haben.

josef-wien schrieb:
Schicke den Unsinn zurück, und verlange vom Absender etwas Ordentliches.
Das ist leider nicht wirklich eine Lösung, denn wenn 99 von 100 Empfängern kein Problem mit den Unicode-Zeichen haben, weil sie Windows benutzen, wird man als der hundertste, der nichts sieht, sicherlich nicht ernst genommen bzw. es wird einem ein kaputtes System unterstellt.
 
OP
M

MH1962

Member
Das Problem ist zwar wie gesagt gelöst, aber ganz verstehen tu ich es noch nicht.

Ich dachte immer, ein Programm entscheidet sich dafür, einen Text in irgendeinem Font darzustellen und der umfasst nun mehr oder weniger Zeichen aus dem schier unendlichen Vorrat von Unicode-Zeichen in UTF-8-Codierung (sofern, was ja üblich ist, diese Codierung eingestellt ist).

Wenn ich aber nur einen zusätzlichen Font installieren muss, damit die Emojis dargestellt werden - und zwar unabhängig davon, welcher Font im Browser, E-Mail-Programm oder sonstwo eingestellt ist - kann diese Annahme so nicht richtig sein.

Woher weiß das Programm, dass es den Font "noto-emoji" nehmen muss, um die Emojis darzustellen? Weil das der einzige Font ist, der diesen Zeichenbereich enthält? Wie wäre aber dann das Verhalten, wenn es zwei Fonts gäbe, die den Zeichenbereich enthalten? Wo ist das dokumentiert?
 

josef-wien

Ultimate Guru
Ein Zeichen besteht je nach Codierung aus 1 bis 4 Bytes. Um das Zeichen darzustellen, benötigt man immer und überall einen Font. So wie Du in einem LibreOffice-Textdokument für einzelne Abschnitte unterschiedliche Fonts (dort sagt man Schriftart) verwenden kannst, wird auch auf jeder Internet-Seite festgelegt, welche Codierung verwendet wird und welcher Font (es können auch mehrere angegeben werden) bzw. welche Font-Familie jeweils zu verwenden ist. Gibt es den Font auf Deinem System nicht (oder fehlt durch Schlamperei diese Angabe), sucht sich der browser eben etwas möglichst Passendes aus (und wenn es so etwas nicht gibt, führt das zu Deinen Erlebnissen). Für ein e-mail im üblichen, unsicheren HTML-Format gilt dasselbe.

Es gibt auch Fonts, die keine Buchstaben, Ziffern und Sonderzeichen darstellen, sondern irgendwelche Symbole. Zur Demonstration braucht Du nur in einem LibreOffice-Textdokument einen Abschnitt zu markieren und dann z. B. den Font (dort Schriftart genannt) "Webdings" auszuwählen (Deinen Emoji-Font wirst Du in der Liste auch finden). Die Codierung der einzelnen Zeichen hat sich nicht verändert, aber die Darstellung ist jetzt ganz anders.
 
OP
M

MH1962

Member
Das beantwortet aber meine Frage nicht.

Ich kann jetzt anscheinend einen beliebigen Font auswählen und trotzdem sind die Emojis, die im Font noto-emoji enthalten sind, sichtbar. Woher weiß der Browser, das E-Mail-Programm etc., dass die Emojis in noto-emoji definiert sind?
 

marce

Guru
Schau mal in den Code der Mail, wie die Emojis definiert / codiert sind.

"Meist" wird der entsprechende HTML-Code dafür genommen. Und damit weiß die Redering-Engine, was sie zu tun hat.
 
MH1962 schrieb:
Das beantwortet aber meine Frage nicht.

Ich kann jetzt anscheinend einen beliebigen Font auswählen und trotzdem sind die Emojis, die im Font noto-emoji enthalten sind, sichtbar. Woher weiß der Browser, das E-Mail-Programm etc., dass die Emojis in noto-emoji definiert sind?

Das Ganze ist eine ziemlich verzwickte Angelegenheit.
Windows verwendet UTF-16, Linux UTF-8. Beide sind grundverschieden und haben nichts miteinander zu tun.
Es gibt in beiden UTF codingtables einen Bereich, der genormt worden ist. Das betrifft den Textbereich, den du als auszuwählenden "anscheinend einen beliebigen Font" bezeichnest. Alle anderen Bereiche sind unbekannt und nicht genormt. Die Emojis sowieso nicht.

Nun hat sich irgendjemand unter Windows die Arbeit angetan, Emojis in einem freien Bereich von UTF-16 zu erstellen und hat dieser Tabelle (Font) den Namen "MeineEmojis" gegeben. Wenn nun der Font MeineEmojis unter Windows installiert wird, dann wird das unter Windows einwandfrei funktionieren. Der Codebereich der Emojis_tabelle liegt außerhalb der im Browser zu wählenden Texttabelle und wird deshalb auch so behandelt, nämlich explizit geladen.

Unter Linux funktioniert das nicht. "MeineEmojis" gibt es nicht in UTF-8, deshalb kann es auch nicht interpretiert werden. Dieser spezielle code stellt für Linux sogar ein Problem dar.
UTF-8 kann von 8bits bis 32bits lang sein. Damit Linux diese Länge richtig interpretieren kann, gibt es spezielle flags im UTF-8 code, die diese Länge erkennbar machen. Wie schon geschrieben, haben UTF-8 und UTF-16 nichts gemein, d.h. auch diese Flags gibt es nicht in UTF-16. Hinzu kommt noch, dass sich UTF-16 auf 32 bzw, 64 Bit Maschinen unterschiedlich darstellt. Was soll Linux damit tun? Linux stellt dieses unbekannte Zeichen in Form eines "Hilfszeichens" dar. Natürlich verursacht das Probleme, die Flaginformationen fehlen und so kann es durchaus sein, dass beim Löschen eines solchen Zeichens eine falsche Anzahl an Bytes gelöscht wird. Deshalb erscheint beim Löschen plötzlich ein anderes Zeichen oder es werden gar mehr Zeichen gelöscht als gewollt.
Wie ich schon geschrieben habe, es ist eine ziemlich verzwickte Angelegenheit.

Nun hat sich ein Linuxanwender die Arbeit angetan, "MeineEmojis" nach UTF-8 zu übertragen. Das hat er wohl nur rudimentär getan, die Darstellung dieser Zeichen unter Linux scheint ja sehr unterschiedlich zur Darstellung unter Windows zu sein, was nicht sein müsste. Trotzdem hat er damit eine Lücke in UTF-8 gefüllt, damit erscheint wenigstens etwas, die UTF-8 Flags sind auch richtig gesetzt und damit ist die Zeichenlänge auch bekannt.

Im Gegensatz zu lokalen Dokumenten, wo der UTF code binär eingetragen ist, wird in mails oder html dieser code sehr speziell und leserlich ausgedrückt. Es gibt da mehrere Möglichkeiten, wie das gemacht wird. Egal, am Ende wird immer in dieser UTF Tabelle nachgesehen, A. liegt er im genormten Textbereich, B. wenn nicht, dann wird die Tabelle (falls vorhanden) geladen und der UTF code entsprechend interpretiert.

Gruß
Gräfin Klara
 
OP
M

MH1962

Member
marce schrieb:
Schau mal in den Code der Mail, wie die Emojis definiert / codiert sind.

"Meist" wird der entsprechende HTML-Code dafür genommen. Und damit weiß die Redering-Engine, was sie zu tun hat.
In den mir vorliegenden Fällen ist es aber tatsächlich der UTF8-codierte Unicode-Character selbst, also ein Bytestream von 4 Bytes. Und es funktioniert trotzdem irgendwie...
 
OP
M

MH1962

Member
Gräfin Klara schrieb:
Das Ganze ist eine ziemlich verzwickte Angelegenheit.
Das glaube ich auch...
Gräfin Klara schrieb:
Windows verwendet UTF-16, Linux UTF-8. Beide sind grundverschieden und haben nichts miteinander zu tun.
Nein. Beides sind unterschiedliche Codierungen für Unicode-Zeichen.
Gräfin Klara schrieb:
Alle anderen Bereiche sind unbekannt und nicht genormt. Die Emojis sowieso nicht.
Nach meinen Recherchen sind die Emojis tatsächlich mittlerweile im Unicode-Zeichensatz genormt. Damit ergibt sich die UTF-8- und auch die UTF-16-Codierung.

Wenn jetzt eine HTML-Mail mit dem Font Arial (z.B.) und UTF-8-Codierung ankommt, sind die Emojis trotzdem sichtbar, obwohl in Arial nicht enthalten (sondern in noto-emoji, denn auch erst nach dessen Installation wurden sie sichtbar). Wie geht das?
 
MH1962 schrieb:
Gräfin Klara schrieb:
Windows verwendet UTF-16, Linux UTF-8. Beide sind grundverschieden und haben nichts miteinander zu tun.
Nein. Beides sind unterschiedliche Codierungen für Unicode-Zeichen.
Das ist ein gängiger Irrtum bzw. eine Simplifizierung.
Es ist nicht die Codierungen eines Zeichens Per se, sondern es ist das unterschiedliche Verfahren von Adressangaben auf Tabellen.
Selbst simpler Text, z.B. '1', entspricht der Adresse 0x0031 in deiner von dir gewählten font Tabelle, in der das Zeichen Bit für Bit auf Adresse 0x0031 beschrieben steht.

MH1962 schrieb:
Nach meinen Recherchen sind die Emojis tatsächlich mittlerweile im Unicode-Zeichensatz genormt. Damit ergibt sich die UTF-8- und auch die UTF-16-Codierung.

Wenn jetzt eine HTML-Mail mit dem Font Arial (z.B.) und UTF-8-Codierung ankommt, sind die Emojis trotzdem sichtbar, obwohl in Arial nicht enthalten (sondern in noto-emoji, denn auch erst nach dessen Installation wurden sie sichtbar). Wie geht das?
Wenn also diese 4 komischen Zeichen in deinem Mail, die eine Adresse darstellen (kann sein im UTF-8 oder UTF-16 Format, das hängt vom mailclient ab, in dem man unter 'Mail senden' die Art des zu sendenden Unicodes einstellen kann) außerhalb des üblich genormten Textbereiches zeigt, dann kann das auch kein Arial Textzeichen sein und die Tabelle 'Arial' wird ignoriert. Steht in einem Text-Mail ein 'a', dann wird in der Tabelle arial (default font) auf der Adresse 0x0061 dieses Zeichen auch gefunden werden und genau so gemalen wie dort gewünscht. Steht die Adresse außerhalb des möglichen Textes - wie in deinem Fall -, dann muß es dafür auch einen anderen font bzw. Tabelle geben, die ihrerseits bei der Installation des Fonts in einer Art Namensliste vorliegt. Gibt es dort keinen Eintrag, dann malt er an der Stelle nichts, irgendwas, ein Spezialzeichen oder er läßt die Adresse stehen wie sie ist. Das hängt nur vom Progammierer derSoftware ab bzw. von der Graphikkarte. Zeigt diese Adresse aber auf eine gültige Tabelle (noto-emoji), dann malt er dir dein Emoji.

Ob die Emojis mittlerweile im Unicode allgemein gültig eingefügt wurden, ist mir nicht bekannt.

Gruß
Gräfin Klara
 
Oben