Once Emacs has chosen a coding system for a buffer, it stores that
coding system in
buffer-file-coding-system. That makes it the
default for operations that write from this buffer into a file, such
write-region. You can specify a
different coding system for further file output from the buffer using
set-buffer-file-coding-system (see Specifying a Coding System for File Text).
You can insert any character Emacs supports into any Emacs buffer,
but most coding systems can only handle a subset of these characters.
Therefore, it’s possible that the characters you insert cannot be
encoded with the coding system that will be used to save the buffer.
For example, you could visit a text file in Polish, encoded in
iso-8859-2, and add some Russian words to it. When you save
that buffer, Emacs cannot use the current value of
buffer-file-coding-system, because the characters you added
cannot be encoded by that coding system.
When that happens, Emacs tries the most-preferred coding system (set
by M-x prefer-coding-system or M-x
set-language-environment). If that coding system can safely encode
all of the characters in the buffer, Emacs uses it, and stores its
buffer-file-coding-system. Otherwise, Emacs displays
a list of coding systems suitable for encoding the buffer’s contents,
and asks you to choose one of those coding systems.
If you insert the unsuitable characters in a mail message, Emacs behaves a bit differently. It additionally checks whether the most-preferred coding system is recommended for use in MIME messages; if not, it informs you of this fact and prompts you for another coding system. This is so you won’t inadvertently send a message encoded in a way that your recipient’s mail software will have difficulty decoding. (You can still use an unsuitable coding system if you enter its name at the prompt.)
When you send a mail message (see Sending Mail),
Emacs has four different ways to determine the coding system to use
for encoding the message text. It first tries the buffer’s own value of
buffer-file-coding-system, if that is non-
Otherwise, it uses the value of
sendmail-coding-system, if that
nil. Thirdly, it uses the value of
If all of these three values are
nil, Emacs encodes outgoing
mail using the default coding system for new files (i.e., the
default value of
buffer-file-coding-system), which is
controlled by your choice of language environment.