mu*index
Lesen
Design
CHARSET  [Protokoll]
Die Telnet-Option aus RFC 2066, mit der eine Kodierung vereinbart wird. Der
Grund, warum die Namen eines Spiels ihre Akzente über die Strecke retten, und
die Ursache einiger subtiler Fehler, wenn sie fehlt.
https://www.rfc-editor.org/rfc/rfc2066

Gemessene Verbreitung
  114 von 886 eingetragenen Spielen haben es in einem von uns beobachteten
  Handshake angeboten (12.9%)
  /de/games?protocol=CHARSET

  Die Spiele, die hier nicht mitgezählt sind, sind keine Spiele ohne das
  Protokoll. Ein Spiel zählt hier, wenn sein Server die Option in einem von uns
  beobachteten Handshake angeboten hat; der Rest sind Server, die sie uns nicht
  angeboten haben, und Server, deren Handshake wir nicht gelesen haben, und
  welches davon zutrifft, können wir Ihnen nicht sagen.

  Nach Codebase, unter den Spielen, die wir identifiziert haben
    PennMUSH             28 von 34 haben es angeboten
    FluffOS              16 von 28 haben es angeboten
    RhostMUSH            5 von 40 haben es angeboten
    ROM                  2 von 55 haben es angeboten
    SMAUG                1 von 20 haben es angeboten
    AresMUSH             0 von 18 haben es angeboten
    CircleMUD            0 von 47 haben es angeboten
    CobraMUSH            0 von 2 haben es angeboten
    CoffeeMUD            0 von 32 haben es angeboten
    DikuMUD              0 von 34 haben es angeboten
    Evennia              0 von 11 haben es angeboten
    MUCK                 0 von 24 haben es angeboten
    tbaMUD               0 von 5 haben es angeboten
    TinyMUSH             0 von 9 haben es angeboten

CHARSET ist Telnet-Option 42, festgelegt in RFC 2066. Die eine Seite bietet eine
Liste von Zeichensätzen an, die andere wählt einen aus, und beide sind sich
danach einig, wie Bytes auf Zeichen abgebildet werden.

In der Praxis einigt sich die Aushandlung auf UTF-8 oder findet gar nicht erst
statt. Die MUSH-Familie handelt sie merklich häufiger aus als die MUD-Familie —
TinyMUX, RhostMUSH und PennMUSH tun es alle —, was eine Bevölkerung
widerspiegelt, die Prosa schreibt, in der Namen vorkommen.

WAS OHNE SIE PASSIERT

Ein Client muss raten, und geraten wird üblicherweise entweder ASCII oder
Latin-1. Rät er ASCII, wird jedes Byte oberhalb von 0x7F zu einem Fragezeichen;
rät er Latin-1 bei einem UTF-8-Server, wird aus jedem Zeichen mit Akzent ein
Paar Satzzeichen. Beide Fehler sehen aus wie ein Fehler des Spiels und sind
keiner.

Für einen Crawler wird das an einer bestimmten Stelle unangenehm. Unsere eigene
Telnet-Bibliothek setzt ihre aktuelle Kodierung standardmäßig auf ASCII, und
dieser Standard ist nicht folgenlos — mit ihm wird jedes Byte dekodiert, bei
jedem Server, der CHARSET nie aushandelt, und das sind die meisten. Aus diesem
Grund geben wir ihn bewusst selbst vor.

DIE EINE STELLE, DIE CHARSET NICHT ERREICHT

MSSP-Feldnamen und -Werte werden als ASCII dekodiert, gleich worauf sich CHARSET
geeinigt hat, denn eine Subnegotiation ist ein Befehl und kein Text, und die
Spezifikation begrenzt CHARSET auf Text. Das ist vertretbar konform und es ist
verlustbehaftet: Ein Spiel, dessen MSSP-NAME Café Noir lautet, meldet Caf? Noir,
und die ursprünglichen Bytes sind weg, bevor irgendetwas unter unserer Kontrolle
sie zu sehen bekommt.

Wenn Sie auf dieser Website in einem angegebenen Feld ein verstümmeltes Zeichen
sehen und in der Ausgabe des Spiels selbst nicht, dann ist das der Grund, und
von unserer Seite lässt es sich nicht wiederherstellen.

Siehe auch
  TTYPE und MTTS — /de/reference/protocols/ttype
  Wie man sich verbindet — /de/reference/connecting
  TinyMUX — /de/reference/codebases/tinymux