Emacs とコーディングシステム

cp932 なファイルを修正しなくてはならなくて、Emacs から保存したら UTF-8 になってしまった。 これでは困るので、腰を上げてコーディングシステムについて調べた。

以下のとおりに理解した。

  • Emacs は指定した言語環境について、いくつかのコーディングシステムを持っている。
  • Emacs はコーディングシステムを順番に試して、文字コードの判定を行う。
    • prefer-coding-system で、指定したコーディングシステムを再優先にできる。
    • (coding-system-priority-list) を評価すると、現在の優先度がわかる。
  • コーディングシステムが決まると、それをバッファローカル変数 buffer-file-coding-system に設定する。
    • UTF-8 のファイルを開いたら utf-8 が設定されるし、cp932 のファイルなら cp932 が設定されるはず。
  • Emacsbuffer-file-coding-system を利用してファイルへの書き出しをおこなう。
    • 別なコーディングシステムを使いたいときは save-buffer-file-coding-system を設定すれば、そちらが優先される。

なるほど自分の init.el には以下のような設定がしてあった。

(setq save-buffer-coding-system 'utf-8-unix)

これでは必ず UTF-8 (LF) で保存されることになってしまうので、この設定は削除した。 そのほかいろいろ設定していたが、結局以下の設定に落ち着いた。

(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)