Next: , Previous: , Up: International   [Contents][Index]


22.11 ファイル名にたいするコーディングシステム

C-x RET F coding RET

ファイル名のエンコードおよびデコードに、コーディングシステム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-systemnilの場合、Emacsは言語環境により選択され、変数default-file-name-coding-systemに格納される、デフォルトのコーディングシステムを使用します。デフォルトの言語環境では、ファイル名の非ASCII文字は特別にエンコードはされません。これらはEmacsの内部表現を使って、ファイルシステム上に表示されます。

Emacsが、MS-WindowsのNTファミリーの子孫(Windows 2000、XP、Vista、Windows 7、Windows 8)にあたるバージョンで実行されている場合、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を使って、ファイル名のコーディングシステムを変更します。このコマンドは古いコーディングシステムでの既存のファイル名と、変換したいコーディングシステムの入力を求めます。