Next: , Previous: , Up: Coding Systems   [Contents][Index]


32.10.6 単一の操作にたいするコーディングシステムの指定

変数coding-system-for-readおよび/またはcoding-system-for-writeをバインドすることにより、特定の操作にたいしてコーディングシステムを指定できます。

Variable: coding-system-for-read

この変数が非nilなら、それはファイルの読み込みや同期サブプロセスプロセスからの入力にたいして使用するコーディングシステムを指定する。

これは非同期サブプロセスやネットワークストリームにも適用されるが方法は異なる。サブプロセス開始時やネットワークストリームオープン時のcoding-system-for-readの値は、サブプロセスやネットワークストリームにたいして入力のデコードメソッドを指定する。そのサブプロセスやネットワークストリームにたいして、オーバーライドされるまでそれが使用され続ける。

特定のI/O操作にたいしてletでバインドするのがこの変数の正しい使い方である。この変数のグローバル値は常にnilであり、他の値にグローバルにセットするべきではない。以下はこの変数の正しい使用例:

;; 文字コード変換なしでファイルを読み込む
(let ((coding-system-for-read 'no-conversion))
  (insert-file-contents filename))

この変数の値が非nilのときはfile-coding-system-alistprocess-coding-system-alistnetwork-coding-system-alistを含む、入力にたいして使用するコーディングシステムを指定するすべてのメソッドよりこの変数が優先される。

Variable: coding-system-for-write

これはcoding-system-for-readと同じように機能するが、入力ではなく出力に適用される点が異なる。これはファイルへの書き込み、同様にサブプロセスおよびネットワークストリームへの出力の送信にも適用される。

単一の操作がcall-process-regionstart-processのように入力と出力の両方を行う際には、coding-system-for-readcoding-system-for-writeの両方がそれに影響する。

User Option: inhibit-eol-conversion

この変数が非nilなら、どのコーディングシステムが指定されたかに関わらず行末変換は何も行われない。これはEmacsすべてのI/Oやサブプロセスにたいするプリミティブ、および明示的なエンコード関数(Explicit Encodingを参照)とデコード関数に適用される。

ある操作にたいして固定された1つのコーディングシステムではなく複数のコーディングシステムを選択する必要があることがあります。Emacsでは使用するコーディングシステムにたいして優先順位を指定できます。これはfind-coding-systems-region(Lisp and Coding Systemsを参照)のような関数によりリターンされるコーディングシステムのリストのソート順に影響します。

Function: coding-system-priority-list &optional highestp

この関数はコーディングシステムのカレント優先順にコーディングシステムのリストをリターンする。オプション引数highestpが非nilなら、それはもっとも高い優先度のコーディングシステムだけをリターンすることを意味する。

Function: set-coding-system-priority &rest coding-systems

この関数はコーディングシステムの優先リストの先頭にcoding-systemsを配置して、それらを他のコーディングシステムすべてより高い優先度とする。

Macro: with-coding-priority coding-systems &rest body…

このマクロはcoding-systemsをコーディングシステム優先リスト先頭に配置して、progn (prognを参照)が行うようにbodyを実行する。coding-systemsbody実行中に選択するコーディングシステムのリストであること。