ファイル名のエンコードおよびデコードに、コーディングシステムcodingを使用します(set-file-name-coding-system
)。
コマンドC-x RET F
(set-file-name-coding-system
)は、ファイルの名前に使用するコーディングシステムを指定します。ファイルの内容の読み込みと書き込みには影響がありません。
実際にこのコマンドが行うのは、変数file-name-coding-system
に値をセットすることだけです。変数にコーディングシステムの名前(Lispシンボルか文字列)をセットすると、Emacsはすべてのファイル操作において、ファイル名のエンコードにそのコーディングシステムを使用します。これによりファイル名に非ASCII文字
— または少なくとも指定されたコーディングシステムではエンコードできる非ASCII文字 — を使うことが可能になります。
file-name-coding-system
がnil
の場合、Emacsは言語環境により選択され、変数default-file-name-coding-system
に格納される、デフォルトのコーディングシステム(通常はUTF-8)を使用します。
Emacsが、MS-WindowsのNTファミリーの子孫(Windows
2000、XP、および以降すべてのバージョン)にあたるバージョンで実行されている場合、file-name-coding-system
の値は大部分が無視されます。これはEmacsがデフォルトでUnicodeファイル名を直接渡せるAPIを使用するからです。一方、Windows
9Xでは、ファイル名は変数file-name-coding-system
を使ってエンコードされており、この変数にはカレントのシステムロケールにたいして適切なコードページ(codepageを参照してください)がセットされている必要があります。変数w32-unicode-filenames
の値は、Emacsがファイル名を引数とするOS関数を呼び出すUnicode
APIを使うかどうかを制御します。この変数はスタートアップコードにより、Windows
9Xではnil
、新しいバージョンのMS-Windowsではt
にセットされます。
警告:
Emacsセッションの途中でfile-name-coding-system
(または言語環境)を変更した場合、すでにvisitしているファイルの名前が、古いコーディングシステムを使えばエンコードできるが、新しいコーディングシステムではエンコードされない(または違ってエンコードされる)という問題が発生します。このようなバッファーをvisitしたファイル名で保存を試みると、間違ったファイル名で保存するか、エラーが発生します。このような問題が発生したときはC-x
C-wを使って、そのバッファーにたいして新しいファイル名を指定してください。
ファイル名をエンコードするとき間違いが発生した場合、コマンドM-x recode-file-nameを使って、ファイル名のコーディングシステムを変更します。このコマンドは古いコーディングシステムでの既存のファイル名と、変換したいコーディングシステムの入力を求めます。