Next: Explicit Encoding, Previous: Default Coding Systems, Up: Coding Systems [Contents][Index]
変数coding-system-for-read
および/またはcoding-system-for-write
をバインドすることにより、特定の操作にたいしてコーディングシステムを指定できます。
この変数が非nil
なら、それはファイルの読み込みや同期サブプロセスプロセスからの入力にたいして使用するコーディングシステムを指定する。
これは非同期サブプロセスやネットワークストリームにも適用されるが方法は異なる。サブプロセス開始時やネットワークストリームオープン時のcoding-system-for-read
の値は、サブプロセスやネットワークストリームにたいして入力のデコードメソッドを指定する。そのサブプロセスやネットワークストリームにたいして、オーバーライドされるまでそれが使用され続ける。
特定のI/O操作にたいしてlet
でバインドするのがこの変数の正しい使い方である。この変数のグローバル値は常にnil
であり、他の値にグローバルにセットするべきではない。以下はこの変数の正しい使用例:
;; 文字コード変換なしでファイルを読み込む
(let ((coding-system-for-read 'no-conversion))
(insert-file-contents filename))
この変数の値が非nil
のときはfile-coding-system-alist
、process-coding-system-alist
、network-coding-system-alist
を含む、入力にたいして使用するコーディングシステムを指定するすべてのメソッドよりこの変数が優先される。
これはcoding-system-for-read
と同じように機能するが、入力ではなく出力に適用される点が異なる。これはファイルへの書き込み、同様にサブプロセスやネットワークストリームへの出力の送信にも適用される。これはEmacsがサブプロセスを呼び出す際のコマンドライン引数のエンコーディングにも適用される。
単一の操作がcall-process-region
やstart-process
のように入力と出力の両方を行う際には、coding-system-for-read
とcoding-system-for-write
の両方がそれに影響する。
coding-system-for-write
を非nil
値にバインドすることによりselect-safe-coding-system-function
で指定された関数の呼び出しからの出力プリミティブを阻む(User-Chosen Coding Systemsを参照)。これはcoding-system-for-write
をバインドすることによりC-x
RET c
(universal-coding-system-argument
)は機能するとともに、Emacsはユーザーの選択にしたがうべきであるから。coding-system-for-write
にたいして、書き込むテキストのエンコーディングに安全ではないかもしれないエンコーディングをLispプログラムがバインドする場合には、coding-system-require-warning
にも非nil
値をバインドすること。これはたとえcoding-system-for-write
が非nil
でも、select-safe-coding-system-function
の値を呼び出すことにより出力プリミティブにエンコーディングのチェックを強制する。あるいは指定されたエンコーディングを使用する前に明示的にselect-safe-coding-system
を呼び出すこと。
この変数が非nil
なら、どのコーディングシステムが指定されたかに関わらず行末変換は何も行われない。これはEmacsすべてのI/Oやサブプロセスにたいするプリミティブ、および明示的なエンコード関数(Explicit Encodingを参照)とデコード関数に適用される。
ある操作にたいして固定された1つのコーディングシステムではなく複数のコーディングシステムを選択する必要があることがあります。Emacsでは使用するコーディングシステムにたいして優先順位を指定できます。これはfind-coding-systems-region
(Lisp and Coding Systemsを参照)のような関数によりリターンされるコーディングシステムのリストのソート順に影響します。
この関数はコーディングシステムのカレント優先順にコーディングシステムのリストをリターンする。オプション引数highestpが非nil
なら、それはもっとも高い優先度のコーディングシステムだけをリターンすることを意味する。
この関数はコーディングシステムの優先リストの先頭にcoding-systemsを配置して、それらを他のコーディングシステムすべてより高い優先度とする。
このマクロはcoding-systemsをコーディングシステム優先リスト先頭に配置して、progn
(prognを参照)が行うようにbodyを実行する。coding-systemsはbody実行中に選択するコーディングシステムのリストであること。