Emacsがバッファのコーディングシステムを選択すると、そのコーディングシステムをbuffer-file-coding-systemに格納します。これにより、save-bufferやwrite-regionなど、このバッファからファイルへ書き出す操作におけるデフォルトのコーディングシステムとなります。バッファからさらにファイルへ出力する際に別のコーディングシステムを指定するには、set-buffer-file-coding-systemを使用します(ファイルテキストのコーディングシステムの指定を参照してください)。
Emacsがサポートする任意の文字を任意のEmacsバッファに挿入できますが、ほとんどのコーディングシステムで扱えるのは、これらの文字の一部に限られています。そのため、挿入した文字が、バッファの保存に使用されるコーディングシステムでエンコードできない可能性があります。例えば、iso-8859-2でエンコードされたポーランド語のテキストファイルを開き、そこにロシア語の単語をいくつか追加したとします。そのバッファを保存する際、追加した文字がそのコーディングシステムでエンコードできないため、Emacsはbuffer-file-coding-systemの現在の値を使用することができません。
その際、Emacsは最も優先されるコーディングシステム(M-x prefer-coding-system
または M-x set-language-environment
で設定)を試みます。そのコーディングシステムでバッファ内のすべての文字を安全にエンコードできる場合、Emacsはそのシステムを使用し、その値を
buffer-file-coding-system
に格納します。そうでない場合は、Emacsはバッファの内容のエンコードに適したコーディングシステムの一覧を表示し、その中からいずれか一つを選択するよう求めます。
メールメッセージに不適切な文字を挿入した場合、Emacsの動作は少し異なります。さらに、最も優先されるコーディング方式がMIMEメッセージでの使用に推奨されているかどうかを確認し、推奨されていない場合はその旨を通知して、別のコーディング方式の入力を促します。これは、受信者のメールソフトがデコードに苦労するような形式でエンコードされたメッセージを、誤って送信してしまうことを防ぐためです。(プロンプトで名称を入力すれば、引き続き不適切なコーディング方式を使用することも可能です。)
メールメッセージを送信する際(メールの送信を参照)、Emacsはメッセージ本文のエンコードに使用するコーディングシステムを決定するために、4つの異なる方法を用います。まず、バッファ自身のbuffer-file-coding-systemの値がnilでない場合、その値を試みます。そうでない場合は、sendmail-coding-systemの値がnilでない場合に、その値を使用します。次に、default-sendmail-coding-systemの値を使用します。これら3つの値がすべてnilである場合、Emacsは新規ファイルのデフォルトコーディングシステム(すなわちbuffer-file-coding-systemのデフォルト値)を用いて送信メールをエンコードします。このシステムは、選択した言語環境によって制御されます。