Next: Converting Representations, Previous: Non-ASCII Characters, Up: Non-ASCII Characters
Emacsには2つのテキスト表現、つまり、 文字列やバッファでテキストを表す方法が2つあります。 これらは、ユニバイト(unibyte)と マルチバイト(multibyte)と呼ばれます。 各文字列や各バッファでは、これらの2つの表現の一方を使います。 ほとんどの目的には、Emacsがこれらのあいだで適切に変換するので、 読者はこれらの表現に関しては無視できます。 Lispプログラムでは、これらの違いに注意する必要がしばしばあります。
ユニバイト表現では、各文字は1バイトを占め、
そのため、可能な文字コードの範囲は0から255です。
コード0から127はASCII文字です。
コード128から255は非ASCII文字集合の1つ
(変数nonascii-insert-offset
に設定して文字集合を選べる)
に使われます。
マルチバイト表現では、1文字は1バイト以上を占め、 そのため、Emacsの文字コードの範囲全体を格納できるのです。 マルチバイト文字の最初のバイトはつねに128から159(8進数で0200から0237)の 範囲にあります。 これらの値をリーディングコード(leading code)と呼びます。 マルチバイト文字の2バイト以降はつねに160から255(8進数で0240から0377)の 範囲にあります。 これらの値をトレイリングコード(trailing code)と呼びます。
バッファでは、変数enable-multibyte-characters
の
バッファローカルな値が使用する表現を指定します。
文字列の表現は、文字列を作成するときの文字列の内容に基づいて決定されます。
この変数は、バッファのテキスト表現を指定する。 これが
nil
以外であると、バッファはマルチバイトテキストを保持する。 さもなければユニバイトテキストを保持する。この変数に直接設定することはできない。 そのかわりに、バッファの表現を変更するには、 関数
set-buffer-multibyte
を使う。
この変数の値は、
(default-value 'enable-multibyte-characters)
に完全に等価であり、 この変数に設定するとデフォルト値を変更する。 バッファのenable-multibyte-characters
のローカルな束縛に設定することは 許されていないが、デフォルト値を変更することは可能であり、 そうしても既存のバッファには影響しないので理にかなっている。コマンド行オプション‘--unibyte’は、 起動時の早い段階でデフォルト値に
nil
を設定することで役目を果たす。