変数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
が指定する関数の呼び出しによる出力プリミティブを抑制する(ユーザーが選択したコーディングシステムを参照)。これはC-x RET c
(universal-coding-system-argument
)がcoding-system-for-write
をバインドすることにより機能して、かつEmacsはユーザーの選択にしたがう必要があるからである。Lispプログラムが書き込むテキストのエンコーディングに安全ではないかもしれない値をcoding-system-for-write
にバインドする場合には、coding-system-require-warning
にも非nil
値をバインドできる。これはたとえcoding-system-for-write
が非nil
でもselect-safe-coding-system-function
の値の呼び出しによる出力プリミティブにエンコードのチェックを強制する。または指定されたエンコーディングを使用する前に、明示的にselect-safe-coding-system
を呼び出すこと。
この変数が非nil
なら、どのコーディングシステムが指定されたかに関わらず行末変換は何も行われない。これはEmacsすべてのI/Oやサブプロセスにたいするプリミティブ、および明示的なエンコード関数(明示的なエンコードとデコードを参照)とデコード関数に適用される。
ある操作にたいして固定された1つのコーディングシステムではなく複数のコーディングシステムを選択する必要があることがあります。Emacsでは使用するコーディングシステムにたいして優先順位を指定できます。これはfind-coding-systems-region
(Lispでのコーディングシステムを参照)のような関数によりリターンされるコーディングシステムのリストのソート順に影響します。
この関数はコーディングシステムのカレント優先順にコーディングシステムのリストをリターンする。オプション引数highestpが非nil
なら、それはもっとも高い優先度のコーディングシステムだけをリターンすることを意味する。
この関数はコーディングシステムの優先リストの先頭にcoding-systemsを配置して、それらを他のコーディングシステムすべてより高い優先度とする。