コード・セットは、状態を持つ (ステートフルな) エンコーディングと状態を持たない (ステートレスな) エンコーディングの 2 つのカテゴリに分類できます。
状態を持つエンコーディングは、特定のコード値に関連付けられた文字セットを変換するのに、シフトイン / シフトアウトなどの制御コードのシーケンスを使用します。
たとえば、コンパウンド・テキストでは、文字データの流れの中で日本語 16 ビット・データの開始を示すのにコントロール・シーケンス「ESC$(B」を使用できます。また、「ESC(B」は、そのダブルバイト文字データの終了と 8 ビット ASCII データの開始を示すのに使用できます。状態を持つエンコーディングでは、ビット値 0x43 はシフト状態が不明の場合解釈できません。EBCDIC アジア・コード・セットは、シフトイン制御とシフトアウト制御を、それぞれダブルバイトとシングルバイト・エンコーディング間の入れ換えに使用します。
別のコード・セットへの状態を持つエンコーディング変換を行うために記述されるコンバータは、特別な処理が必要なためにやや複雑になります。
状態を持たないコード・セットは、次の 2 つのうちの 1 つに分類できます。
シングルバイト・コード・セット (ISO8859 ファミリなど)
マルチバイト・コード・セット (日本語用 PC コード、通称 Shift-JIS (SJIS) など)
マルチバイト・コード・セットという用語は、1 つの文字をエンコードするのに 1 つ以上のバイトを必要とするコード・セットにも使います。マルチバイト・コード・セットは状態を持たないと見なされます。
コード・セットが同じ文字セットを表すときに限り、変換してください。