Emacsが直接マルチバイトバッファーにプロセス出力を書き込む際には、プロセス出力のコーディングシステムに応じて出力をデコードします。コーディングシステムがraw-text
かno-conversion
ならEmacsはstring-to-multibyte
を使用してユニバイト出力をマルチバイトに変換して、その結果のマルチバイトテキストを挿入します。
どのコーディングシステムを使用するかはset-process-coding-system
を使用して指定できます(プロセスの情報を参照)。それ以外ではcoding-system-for-read
が非nil
ならそのコーディングシステム、nil
ならデフォルトのメカニズムが使用されます(デフォルトのコーディングシステムを参照)。プロセスのテキスト出力にnullバイトが含まれる場合には、Emacsはそれにたいしてデフォルトではno-conversion
を使用します。この挙動を制御する方法についてはinhibit-null-byte-detectionを参照してください。
警告:
データからコーディングシステムを判断するundecided
のようなコーディングシステムは、非同期サブプロセスの出力にたいして完全な信頼性をもって機能しません。これはEmacsが到着に応じて非同期サブプロセスの出力をバッチで処理する必要があるからです。Emacsは1つのバッチが到着するたびに正しいコーディングシステムを検出しなければならずこれは常に機能するわけではありません。したがって可能であれば文字コード変換とEOL変換の両方を決定するコーディングシステムつまりlatin-1-unix
、undecided
、latin-1
のようなコーディングシステムを指定してください。
Emacsがプロセスフィルター関数を呼び出す際には、そのプロセスのフィルターのコーディングシステムに応じてEmacsはプロセス出力をマルチバイト文字列、またはユニバイト文字列で提供します。Emacsはプロセス出力のコーディングシステムに応じて出力をデコードします。これはbinary
やraw-text
のようなコーディングシステムを除いて、通常はマルチバイト文字列を生成します。