mu*index
lezen
platte tekst
thema

protocol

CHARSET

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 — 12.9%

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.

Spellen die we CHARSET in een handshake hebben zien aanbieden, naar de codebase waarvan we vaststelden dat ze erop draaien.
codebase bood het aan vastgesteld
PennMUSH 28 34
FluffOS 16 28
RhostMUSH 5 40
ROM 2 55
SMAUG 1 20
AresMUSH 0 18
CircleMUD 0 47
CobraMUSH 0 2
CoffeeMUD 0 32
DikuMUD 0 35
Evennia 0 11
MUCK 0 24
tbaMUD 0 5
TinyMUSH 0 9

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 Hoe een client een server vertelt wat hij is en wat hij kan — inclusief, als de client dat wil zeggen, dat er een schermlezer in gebruik is.
  • Hoe je verbinding maakt Een host, een poort en telnet. Wat het adres op een spelpagina betekent en wat je ermee doet.
  • TinyMUX De andere grote MUSH-server. Softcode die dicht genoeg bij die van PennMUSH ligt om over te ruziën, helemaal geen MSSP, en een WHO vóór het inloggen die werkt.