Next: Lisp and Coding Systems, Previous: Coding System Basics, Up: Coding Systems [Contents][Index]
コーディングシステムの主な目的はファイルの読み込みと書き込みへの使用です。関数insert-file-contents
はファイルデータのデコードにコーディングシステムを使用して、write-region
はバッファーコンテンツのエンコードにコーディングシステムを使用します。
使用するコーディングシステムは明示的(Specifying Coding Systemsを参照)、またはデフォルトメカニズム(Default Coding Systemsを参照)を使用により暗黙的に指定できます。しかしこれらの手法は何を行うかを完全には指定しないかもしれません。たとえば、これらはデータから文字コード変換を行わないundecided
のようなコーディングシステムを選択するかもしれません。このような場合、I/O処理はコーディングシステム選択により処理を完了します。後でどのコーディングシステムが選択されたか調べたいことが頻繁にあるでしょう。
このバッファーローカル変数はバッファーの保存、およびwrite-region
によるバッファー部分のファイルへの書き出しに使用されるコーディングシステムを記録する。書き込まれるテキストがこの変数で指定されたコーディングシステムを使用して安全にエンコードできない場合には、これらの操作は関数select-safe-coding-system
を呼び出すことにより代替となるエンコーディングを選択する(User-Chosen Coding Systemsを参照)。異なるエンコーディングの選択がユーザーによるコーディングシステムの指定を要するなら、buffer-file-coding-system
は新たに選択されたコーディングシステムに更新される。
buffer-file-coding-system
はサブプロセスへのテキスト送信に影響しない。
この変数は、(buffer-file-coding-system
をオーバーライドして)バッファーを保存するためのコーディングシステムを指定する。これはwrite-region
には使用されないことに注意。
あるコマンドがバッファーを保存するためにbuffer-file-coding-system
(またはsave-buffer-coding-system
)の使用を開始して、そのコーディングシステムがバッファー内の実際のテキストを処理できなければ、(select-safe-coding-system
を呼び出すことにより)そのコマンドは他のコーディングシステムの選択をユーザーに求める。これが発生した後はコマンドはユーザー指定のコーディングシステムを表すためにbuffer-file-coding-system
の更新も行う。
ファイルやサブプロセスにたいするI/O操作は、使用したコーディングシステムの名前をこの変数にセットする。明示的にエンコードとデコードを行う関数(Explicit Encodingを参照)もこの変数をセットする。
警告: サブプロセス出力の受信によりこの変数がセットされるため、この変数はEmacsがwaitしている際は常に変更され得る。したがって興味対象となる値を格納する関数呼び出し後は、間を空けずにその値をコピーすること。
変数selection-coding-system
はウィンドウシステムにたいして選択(selection)をエンコードする方法を指定します。Window System Selectionsを参照してください。
変数file-name-coding-system
はファイル名のエンコーディングに使用するコーディングシステムを指定する。Emacsは、すべてのファイル操作にたいして、ファイル名のエンコードにそのコーディングシステムを使用する。file-name-coding-system
がnil
ならEmacsは選択された言語環境(language
environment)により決定されたデフォルトのコーディングシステムを使用する。デフォルト言語環境ではファイル名に含まれるすべての非ASCII文字は特別にエンコードされない。これらはEmacsの内部表現を使用してファイルシステム内で表される。
警告: Emacsのセッション中にfile-name-coding-system
(または言語環境)を変更した場合には、以前のコーディングシステムを使用してエンコードされた名前をもつファイルをvisitしていると、新たなコーディングシステムでは異なるように扱われるので問題が発生し得る。これらのvisitされたファイル名でこれらのバッファーの保存を試みると、保存で間違ったファイル名が使用されたりエラーとなるかもしれない。そのような問題が発生したら、そのバッファーにたいして新たなファイル名を指定するためにC-x
C-wを使用すること。
Windows 2000以降ではEmacsはOSに渡すファイル名にデフォルトでUnicode
APIを使用するため、file-name-coding-system
の値は大部分が無視される。Lispレベルでファイル名のエンコードやデコードを必要とするLispアプリケーションは、system-type
がwindows-nt
のときはutf-8
をコーディングシステムに使用すること。UTF-8でエンコードされたファイル名から、OSと対話するために適したエンコーディングへの変換はEmacsにより内部的に処理される。