CHARSET [protocol]
De telnet-optie uit RFC 2066 om een codering af te spreken. De reden dat namen
met accenten in een spel de reis overleven, en de bron van een paar subtiele
fouten wanneer hij ontbreekt.
https://www.rfc-editor.org/rfc/rfc2066
Gemeten adoptie
114 van 886 vermelde spellen hebben we het zien aanbieden (12.9%)
/nl/games?protocol=CHARSET
De spellen die hier niet meetellen zijn geen spellen zonder het protocol. Een
spel telt mee wanneer we zijn server de optie in een handshake hebben zien
aanbieden; de rest zijn servers die het ons niet aangeboden hebben en servers
waarvan we de handshake niet gelezen hebben, en welke van beide het is kunnen
we niet zeggen.
Naar codebase, van de spellen die we hebben vastgesteld
PennMUSH 28 van 34 boden het aan
FluffOS 16 van 28 boden het aan
RhostMUSH 5 van 40 boden het aan
ROM 2 van 55 boden het aan
SMAUG 1 van 20 boden het aan
AresMUSH 0 van 18 boden het aan
CircleMUD 0 van 47 boden het aan
CobraMUSH 0 van 2 boden het aan
CoffeeMUD 0 van 32 boden het aan
DikuMUD 0 van 35 boden het aan
Evennia 0 van 11 boden het aan
MUCK 0 van 24 boden het aan
tbaMUD 0 van 5 boden het aan
TinyMUSH 0 van 9 boden het aan
CHARSET is telnet-optie 42, gespecificeerd in RFC 2066. De ene kant biedt een
lijst met tekensets aan, de andere kiest er een, en daarna zijn beide het eens
over hoe bytes op tekens worden afgebeeld.
In de praktijk komt de onderhandeling uit op UTF-8 of vindt ze helemaal niet
plaats. De MUSH-familie onderhandelt er merkbaar vaker over dan de MUD-familie —
TinyMUX, RhostMUSH en PennMUSH doen het alle drie — en dat past bij een
bevolking die proza schrijft met namen erin.
WAT ER GEBEURT ZONDER
Een client moet raden, en de gebruikelijke gok is ASCII of Latin-1. Gok ASCII en
elke byte boven 0x7F wordt een vraagteken; gok Latin-1 op een UTF-8-server en
elk letterteken met een accent wordt twee leestekens. Beide fouten zien eruit
als de schuld van het spel en zijn dat niet.
Voor een crawler bijt dit op één bepaalde plek. Onze eigen telnet-bibliotheek
zet haar huidige codering standaard op ASCII, en die standaardwaarde is niet
onschuldig — het is waarmee elke byte gedecodeerd wordt, voor elke server die
nooit over CHARSET onderhandelt, en dat zijn de meeste. Daarom stellen we hem
bewust zelf in.
DE ENE PLEK WAAR CHARSET NIET KOMT
MSSP-veldnamen en -waarden worden als ASCII gedecodeerd, ongeacht waar CHARSET
op uitkwam, want een subonderhandeling is een commando en geen tekst, en de
specificatie beperkt CHARSET tot tekst. Dat is verdedigbaar conform en het is
verliesgevend: een spel waarvan de MSSP-NAME Café Noir is, meldt Caf? Noir, en
de oorspronkelijke bytes zijn weg voordat iets wat wij in de hand hebben ze
ziet.
Zie je op deze site een verminkt teken in een opgegeven veld en niet in de
uitvoer van het spel zelf, dan is dat de reden, en van onze kant valt het niet
meer te herstellen.
Zie ook
TTYPE en MTTS — /nl/reference/protocols/ttype
Hoe je verbinding maakt — /nl/reference/connecting
TinyMUX — /nl/reference/codebases/tinymux