mu*index
読み方
テーマ
CHARSET  [プロトコル]
エンコーディングを取り決めるための、RFC
2066のtelnetオプション。ゲームのアクセント付きの名前が無事に届く理由であり、これがないときに起きる分かりにくい失敗の原因でもあります。
https://www.rfc-editor.org/rfc/rfc2066

実測した採用状況
  掲載886件のゲームのうち114件で提供を観測(12.9%)
  /ja/games?protocol=CHARSET

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

  特定できたゲームの、コードベース別
    PennMUSH             34件のうち28件が提供
    FluffOS              28件のうち16件が提供
    RhostMUSH            40件のうち5件が提供
    ROM                  55件のうち2件が提供
    SMAUG                20件のうち1件が提供
    AresMUSH             18件のうち0件が提供
    CircleMUD            47件のうち0件が提供
    CobraMUSH            2件のうち0件が提供
    CoffeeMUD            32件のうち0件が提供
    DikuMUD              35件のうち0件が提供
    Evennia              11件のうち0件が提供
    MUCK                 24件のうち0件が提供
    tbaMUD               5件のうち0件が提供
    TinyMUSH             9件のうち0件が提供

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のNAMEが Café NoirのゲームはCaf?
Noirと報告し、元のバイトは当サイトが手を出せるどの段階よりも前に 消えています。

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

関連項目
  TTYPEとMTTS — /ja/reference/protocols/ttype
  接続のしかた — /ja/reference/connecting
  TinyMUX — /ja/reference/codebases/tinymux