Next: Selecting a Representation, Previous: Text Representations, Up: Non-ASCII Characters
Emacsはユニバイトテキストをマルチバイトに変換できます。 マルチバイトテキストをユニバイトにも変換できますが、 この変換では情報が欠落します。 バッファにテキストを挿入するとき、あるいは、 複数の文字列から1つの文字列にテキストを収めるときに、 一般にこれらの変換が行われます。 文字列の内容をどちらかの表現に明示的にも変換できます。
Emacsは、文字列を作成するときにはその内容に基づいて 文字列の表現を選びます。 一般則は、ユニバイトテキストを他のマルチバイトテキストに組み入れるときには ユニバイトテキストをマルチバイトテキストに変換します。 マルチバイト表現のほうが汎用であり、 ユニバイトテキストのどんな文字でも保持できるからです。
バッファにテキストを挿入するときには、Emacsは、
当該バッファのenable-multibyte-characters
の指定に従った
バッファの表現にテキストを変換します。
特に、ユニバイトバッファにマルチバイトテキストを挿入するときには、
マルチバイトテキスト内のすべての文字を一般には保存できなくても、
Emacsはテキストをユニバイトに変換します。
自然な代替案はバッファ内容をマルチバイトに変換することですが、
これは受け入れられません。
バッファの表現はユーザーが選択したものであり自動的には無視できないからです。
ユニバイトテキストをマルチバイトテキストに変換しても
ASCII文字は無変更であり、128から159も同様です。
160から255の非ASCIIについては、
各文字にnonascii-insert-offset
の値を加算することで変換します。
この変数に設定すると、ユニバイト文字がどの文字集合に対応するかを指定できます
(see Character Sets)。
たとえば、nonascii-insert-offset
が
(- (make-char 'latin-iso8859-1) 128)
の2048であると、
非ASCIIのユニバイトはLatin 1に対応します。
(- (make-char 'greek-iso8859-7) 128)
の2688であると、
ギリシャ文字に対応します。
マルチバイトテキストをユニバイトに変換するのは簡単で、
各文字コードと255の論理積をとります。
nonascii-insert-offset
に
文字集合の始まりに対応する合理的な値が設定されていれば、
この変換は逆変換になります。
つまり、ユニバイトテキストをマルチバイトに変換し、
それをユニバイトに戻すともとのユニバイトテキストになります。
この変数は、ユニバイトテキストをマルチバイトに変換するときに 非ASCII文字に加算する値を指定する。 これは、128から255のユニバイトの非ASCIIの範囲の文字を挿入する
self-insert-command
にも適用される。 しかし、関数insert-char
はこの変換を行わない。文字集合csを選択する正しい値は、
(- (make-char
cs) 128)
である。nonascii-insert-offset
の値が0であると、 実際の変換には0ではなくLatin 1文字集合に対する値を使う。
この変数は、
nonascii-insert-offset
のより一般的な代替を提供する。 128から255の範囲の各コードをマルチバイト文字に変換する方法を 独立して指定するために使える。 その値はベクトルかnil
であること。 これがnil
以外であると、nonascii-insert-offset
に優先する。