Emacsがバッファーにたいして1度コーディングシステムを選択すると、そのコーディングシステムは、buffer-file-coding-system
に記録されます。これによりsave-buffer
やwrite-region
などの、バッファーからファイルに書き込む際のデフォルトに、それを使用するようになります。set-buffer-file-coding-system
を使って、バッファーのコーディングシステムとは異なるコーディングシステムで、ファイルに書き込むよう指定できます(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。
Emacsがサポートする任意の文字を、任意のEmacsバッファーに挿入できますが、ほとんどのコーディングシステムは、それらの文字のサブセットしか処理することができません。したがって挿入した文字は、そのバッファーを保存するのに使われるコーディングシステムではエンコードできないかもしれません。たとえば、iso-8859-2
でエンコードされたPolishのファイルをvisitして、それにRussianの単語を追加することは可能です。このバッファーを保存するとき、Emacsはbuffer-file-coding-system
の現在の値を使用できません。なぜなら追加された文字が、そのコーディングシステムではエンコードできないからです。
これが発生した場合、Emacsは(M-x prefer-coding-systemまたはM-x
set-language-environmentによりセットされた)もっとも適したコーディングシステムを試します。そのコーディングシステムがバッファーのすべての文字をエンコードできたら、Emacsはそれを使って、その値をbuffer-file-coding-system
に格納します。そうでなければEmacsはバッファー内容をエンコードするのに適したコーディングシステムのリストを表示して、それらのコーディングシステムを1つ選ぶよう求めます。
メールメッセージに適さない文字を入力した場合、Emacsの振る舞いは若干異なります。この場合、追加でMIMEメッセージに推奨されたもっとも適したコーディングシステムかをチェックします。もしそうでなければ、この事実を知らせ、他のコーディングシステムの入力を求めます。これにより、メール受信者のメールソフトがデコードするのが困難なエンコードで、無意識にメッセージを送るようなことがなくなります(入力をもとめられたときに、適さないコーディングシステムを選ぶ、という選択肢もまだ残っています)。
メールメッセージを送信するとき、Emacsはメッセージテキストのエンコーディングに使うコーディングシステムを決定する、4つの異なる方法をもっています。最初にバッファー自身のbuffer-file-coding-system
が非nil
なら、それを使います。次にsendmail-coding-system
が非nil
なら、それを使います。3番目はdefault-sendmail-coding-system
の値を使います。上述した値のすべてがnil
の場合、Emacsは、新たなファイルに使用されるデフォルトコーディングシステム(選択された言語環境により制御される、buffer-file-coding-system
の値)を使用して送信メールをエンコードします。