mu*index
読み方
プレーンテキスト
テーマ

プロトコル

CHARSET

エンコーディングを取り決めるための、RFC 2066のtelnetオプション。ゲームのアクセント付きの名前が無事に届く理由であり、これがないときに起きる分かりにくい失敗の原因でもあります。

https://www.rfc-editor.org/rfc/rfc2066

実測した採用状況

114 掲載886件のゲームのうち — 12.9%

ここに数えていないゲームは、そのプロトコルを持たないゲームということではない。数えるのは、そのサーバーがハンドシェイクでそのオプションを提供するのを観測したとき。残りは、当サイトに提供しなかったサーバーと、ハンドシェイクをまだ読んでいないサーバーであり、どちらなのかは言えない。

ハンドシェイクでCHARSETを提供するのを観測したゲームを、動かしていると特定したコードベース別に示したもの。
コードベース 提供あり 特定済み
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はtelnetオプション42で、RFC 2066で規定されています。一方が文字セットの一覧を提示し、もう一方が そこから1つを選び、両者はバイトと文字の対応について合意します。

実際には、このネゴシエーションはUTF-8に落ち着くか、そもそも行われないかのどちらかです。MUSHの系統は MUDの系統よりもはっきり多くネゴシエートしており — TinyMUX、RhostMUSH、PennMUSHはいずれも行います — これは名前の入った文章を書く人たちの集まりであることの表れです。

これがないと何が起きるか

クライアントは推測するしかなく、たいていの推測はASCIIかLatin-1です。ASCIIと推測すれば0x7Fを超える バイトはすべて疑問符になり、UTF-8のサーバーをLatin-1と推測すればアクセント付きの文字はどれも2つの 記号に化けます。どちらの失敗もゲームのせいに見えますが、そうではありません。

クローラーにとっては、これが特定の場所で効いてきます。当サイトが使っているtelnetライブラリは、現在の エンコーディングの既定値をASCIIにしており、この既定値は無害ではありません — CHARSETを一度も ネゴシエートしないサーバー、つまり大半のサーバーでは、すべてのバイトがこれで復号されます。だからこそ 当サイトは意図してその初期値を与えています。

CHARSETが届かない唯一の場所

MSSPのフィールド名と値は、CHARSETが何に落ち着いたかに関係なくASCIIとして復号されます。 サブネゴシエーションはテキストではなくコマンドであり、仕様がCHARSETの適用範囲をテキストに限って いるからです。これは仕様に適合していると言えなくもありませんが、情報は失われます。MSSPのNAMECafé NoirのゲームはCaf? Noirと報告し、元のバイトは当サイトが手を出せるどの段階よりも前に 消えています。

当サイトの自己申告のフィールドで文字化けが見えるのに、ゲーム自身の出力では見えない場合、理由はこれで あり、当サイトの側からは復元できません。

関連項目

  • TTYPEとMTTS クライアントが、自分は何であり何ができるかをサーバーに伝えるための仕組み — クライアントがそう伝えることを選べば、スクリーンリーダーが使われていることも含めて。
  • 接続のしかた ホストとポート、そしてtelnet。ゲームのページに載っているアドレスが何を意味し、それをどうするか。
  • TinyMUX もう一つの大きなMUSHサーバー。PennMUSHのものと議論になるほど近いsoftcode、MSSPはまったくなし、そして機能するログイン前のWHO。