Wie wird bestimmt, welches Symbol einer Schriftart bei Verwendung einer bestimmten Zeichenkodierung angezeigt wird?

Wie wird bestimmt, welches Symbol einer Schriftart bei Verwendung einer bestimmten Zeichenkodierung angezeigt wird?

Ich versuche, die ganze Geschichte dahinter zu verstehen, wie Text auf Bildschirme gelangt. Der Einfachheit halber bleibe ich bei Einzelbyte-Kodierungen (kein Unicode).

Auf meiner Festplatte befindet sich eine Folge von Bytes, jedes mit einem Wert zwischen 0 und 255. Ich kann meinen Computerprogrammen dann sagen, welche Zeichenkodierung sie verwenden sollen, um diese Bytes anzuzeigen. Ich könnte ISO-8859-1 verwenden, wo beispielsweise das Byte mit dem Wert 0xA4 ein Kreis mit vier Punkten (¤) ist. Oder ich könnte zu ISO-8859-15 wechseln, dann ist mein Byte mit dem Wert 0xA4 als Euro-Symbol (€) definiert.

Das ist alles noch einfach zu verstehen. Aber parallel zur Änderung der Zeichenkodierung kann ich auch die Schriftart ändern, um die genaue Form eines Symbols zu definieren. Nun soll eine Schriftart mitalleZeichenkodierungen. Eine Schriftart sollte also beide Symbole haben: ¤ und €.

Die Schritte, um einen Text auf meinen Bildschirm zu bekommen, sind also offensichtlich:

  1. Bytefolge seriell lesen
  2. Verwenden Sie den numerischen Wert des aktuellen Bytes, um in der Zeichenkodierungstabelle nachzuschlagen
  3. Verwenden Sie [etwas], um in der Schriftartdatei nachzuschlagen, um die genaue Form des in Schritt 2 gefundenen Symbols zu erhalten
  4. Zeichnet das Symbol wie in der Schriftdatei definiert

Was ist dieses „Etwas“, das in Schritt 3 verwendet wird, um die Zeichenkodierung der Schriftart zuzuordnen? Sind Schriftdateien von der Zeichenkodierung abhängig? Verfügt eine Schriftart also über einen integrierten „Doppelschalter“-Mechanismus, der wie (Pseudocode) funktioniert?

get_symbol(code, encoding) {
  switch code{
    case 0xA4: switch(encoding) {
      case 'ISO-8859-1' : return '¤';
      case 'ISO-8859-15': return '€';
    }
  }
}

?

Wie gelangt man im Detail von einer gegebenen Bytefolge und einer gegebenen Zeichenkodierung zum eigentlichen Symbol aus der Schriftart? Wie wird dies abgebildet, um immer das richtige Symbol zu erhalten?

Antwort1

Schriftdateien sind so konzipiert, dass sie eine bestimmte Kodierung anzeigen. Das Programm, das eine bestimmte Schriftart verwendet, muss davon ausgehen, dass ein Wert nin einer bestimmten Kodierung durch die Darstellung der entsprechenden Glyphennummer angezeigt wird n.

Schriftdateien müssen nicht Glyphen für alle möglichen Werte einer bestimmten Zeichenkodierung enthalten (bei Unicode ist es selten, dass eine Schriftart den gesamten Bereich abdeckt), noch müssen sie mit dem ersten Wert der Kodierung beginnen (normalerweise werden die Steuerzeichen weggelassen). Es gibt verschiedene Dateiformatschemata zum Angeben des Startpunkts, des Endpunkts und der weggelassenen Glyphen, die verwendet werden, um die Größe der Schriftdateien überschaubar zu halten.

Aus dem gegebenen Beispiel geht hervor, dass der OP wahrscheinlich das X Window-System verwendet. Es wird mehr als ein Dateiformat verwendet, mit entsprechend unterschiedlichen Zugriffsmöglichkeiten. Die wichtigsten sind:XLFD(älter) undSchriftartkonfiguration(neuer). Bei anderen Systemen (Microsoft Windows) werden andere APIs verwendet (dieLOGFONTStruktur ist ein guter Ausgangspunkt). OSX ist ein weiteres Beispiel mit seiner eigenen API (Kerntext).

Diese sind natürlich für grafische Benutzeroberflächen gedacht. Schriftarten sind aber noch viel vielseitiger einsetzbar. Linux und BSDs erlauben beispielsweise die Angabe verschiedener Konsolenschriftarten, die neben der Kodierung auch Einschränkungen hinsichtlich der Anzahl der verwendbaren Glyphen mit sich bringen. Hier sind ein paar nützliche Links dazu:

Antwort2

Die App, die den Text zeichnet, gibt in den von ihr verwendeten Textzeichnungs-APIs eine Schriftart an. Wenn keine Angabe erfolgt, wird eine systemeigene Standardschriftart verwendet.

Unicode-basierte Textzeichnungssysteme verfügen häufig über einen Algorithmus zur Schriftartersetzung, um eine Schriftart zu finden, die eine bestimmte Glyphe enthält, wenn die angegebene Schriftart die angeforderte Glyphe nicht enthält. Systeme vor Unicode können eine Glyphe jedoch im Allgemeinen nicht zeichnen oder zeichnen eine Glyphe mit der Aufschrift „Fehlende Glyphe“. Sogar Unicode-basierte Systeme zeichnen manchmal ein Symbol mit der Aufschrift „Fehlende Glyphe“.

verwandte Informationen