コーディングシステムの主な目的は、ファイルの読み書きに使用することです。関数 insert-file-contents はコーディングシステムを用いてファイルデータをデコードし、write-region は同システムを用いてバッファの内容をエンコードします。
使用するコーディングシステムは、明示的に指定するか(単一の操作に対するコーディングシステムの指定を参照)、あるいはデフォルト機構を用いて暗黙的に指定することができます(デフォルトのコーディングシステムを参照)。ただし、これらの方法では、どのように処理すべきかが完全には指定されない場合があります。例えば、undecidedのようなコーディングシステムが選択され、文字コードの変換がデータから決定される場合があります。このような場合、I/O操作によってコーディングシステムの選択が完了します。その後、どのコーディングシステムが選択されたかを確認したい場面が非常に多くあります。
このバッファローカル変数は、バッファの保存およびバッファの一部を write-region
で書き込む際に使用されるコーディングシステムを記録します。書き込むテキストをこの変数で指定されたコーディングシステムを用いて安全にエンコードできない場合、これらの操作は関数
select-safe-coding-system
を呼び出すことで代替のエンコーディングを選択します(ユーザー選択のコーディングシステム
を参照)。別のエンコーディングを選択するためにユーザーにコーディングシステムの指定を求める必要がある場合、buffer-file-coding-system は新たに選択されたコーディングシステムに更新されます。
buffer-file-coding-system はサブプロセスへのテキスト送信に影響しません。
この変数は、バッファを保存するためのコーディングシステムを指定します(buffer-file-coding-system を上書きします)。なお、write-region には使用されません。
バッファを保存するコマンドが最初に buffer-file-coding-system(または
save-buffer-coding-system)を使用し、その符号化方式ではバッファ内の実際のテキストを扱えない場合、コマンドはユーザーに別の符号化方式を選択するよう求めます(select-safe-coding-system を呼び出すことで)。その後、コマンドは buffer-file-coding-system も更新し、ユーザーが指定した符号化方式を表すようにします。
ファイルやサブプロセスの入出力操作により、この変数には使用されたコーディングシステム名が設定されます。また、明示的なエンコードおよびデコード関数(明示的なエンコードとデコードを参照)によっても設定されます。
警告: サブプロセスの出力を受け取るとこの変数が設定されるため、Emacsが待機するたびに値が変更される可能性があります。したがって、関心のある値を格納する関数呼び出しの直後に、その値をコピーしてください。
変数 selection-coding-system
は、ウィンドウシステムにおける選択のエンコード方法を指定します。ウィンドウシステムの選択を参照してください。
変数 file-name-coding-system
は、ファイル名のエンコードに使用するコーディングシステムを指定します。Emacs
は、すべてのファイル操作において、そのコーディングシステムを用いてファイル名をエンコードします。file-name-coding-system が nil
の場合、Emacs は選択された言語環境によって決定されるデフォルトのコーディングシステムを使用します。デフォルトの言語環境では、ファイル名に含まれる
ASCII 以外の文字は特別にエンコードされず、Emacs
内部の表現形式でファイルシステムに表示されます。
警告: Emacs セッションの途中で file-name-coding-system(または言語環境)を変更した場合、以前のコーディングシステムでエンコードされ、新しいコーディングシステムでは異なる扱いとなるファイル名のファイルを既に訪問していると、問題が発生することがあります。これらのバッファのいずれかを訪問済みのファイル名で保存しようとすると、誤ったファイル名が使用されたり、エラーが発生したりすることがあります。このような問題が発生した場合は、C-x C-w を使用してそのバッファに新しいファイル名を指定してください。
Windows 2000以降では、EmacsはデフォルトでUnicode APIを使用してファイル名をOSに渡すため、file-name-coding-systemの値はほとんど無視されます。Lispレベルでファイル名のエンコードやデコードを行う必要があるLispアプリケーションは、system-typeがwindows-ntである場合にutf-8
coding-systemを使用してください。UTF-8でエンコードされたファイル名をOSとの通信に適したエンコーディングに変換する処理は、Emacs内部で行われます。