次: , 前: Library Search, 上: Loading


14.3 非ASCII文字のロード

Emacs Lispプログラムが非ASCII文字の文字列定数を含む場合、 Emacs内部では、それらはユニバイト文字列かマルチバイト文字列で表現できます (see Text Representations)。 どちらの表現形式を用いるかは、 どのようにファイルをEmacsに読み込んだかに依存します。 マルチバイト表現へ復号化して読んだ場合には、 Lispプログラムのテキストはマルチバイトテキストになり、 その文字列定数はマルチバイト文字列になります。 (たとえば)Lantin-1文字を含むファイルを復号化せずに読むと、 プログラムテキストはユニバイトテキストになり、 その文字列定数はユニバイト文字列になります。 See Coding Systems

結果をより予測可能にするために、 オプション`--unibyte'を指定して起動した場合であっても、 Lispファイルをロードするときには、 Emacsはつねにマルチバイト表現に復号化します。 つまり、非ASCII文字の文字列定数はマルチバイト文字列に変換します。 唯一の例外は、特定のファイルで無変換を指定した場合だけです。

Emacsをこのように設計したのは、 Emacsの起動方法によらずに、 Lispプログラムが予測可能な結果をもたらすようにするためです。 さらに、こうすることで、ユニバイト動作のEmacsであっても、 マルチバイトテキストを使うことに依存したプログラムが動作します。 もちろん、そのようなプログラムは、 default-enable-multibyte-charactersを検査して適切に表現を変換して、 ユーザーがユニバイトテキストとマルチバイトテキストのどちらを 好んでいるか調べるように設計すべきです。

Emacs Lispのほとんどのプログラムでは、 非ASCII文字列はマルチバイト文字列であるということに 気づかないでしょう。 というのは、それらをユニバイトバッファに挿入すると 自動的にユニバイトに変換するからです。 しかしながら、これで違いがでるならば、 Lispファイルの先頭行のコメントに`-*-unibyte: t;-*-'と書くことで、 特定のLispファイルをユニバイトと解釈するように強制できます。 このように指定すると、マルチバイト動作のEmacsであっても、 そのファイルを無条件にユニバイトと解釈します。