GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Decoding-Output.html ・ emacs-doc.conao3.com

41.9.3 デコード処理の出力

Emacsがプロセスの出力をマルチバイトバッファに直接書き込む際、プロセスの出力コーディングシステムに従って出力をデコードします。コーディングシステムがraw-textまたはno-conversionの場合、Emacsはユニバイト出力をstring-to-multibyteを用いてマルチバイトに変換し、得られたマルチバイトテキストを挿入します。

set-process-coding-system を使用して、どのコーディングシステムを使用するかを指定できます(プロセス情報を参照)。そうでない場合、コーディングシステムは、coding-system-for-read が nil 以外であればそこから、そうでなければデフォルト設定メカニズム(デフォルトのコーディングシステムを参照)から決定されます。プロセスが出力するテキストにヌルバイトが含まれている場合、Emacs はデフォルトで no-conversion を使用します。この動作を制御する方法については、inhibit-null-byte-detection を参照してください。

警告: undecided のように、データからコーディングシステムを判定するコーディングシステムは、非同期のサブプロセス出力において完全には安定して動作しません。これは、Emacs が非同期のサブプロセス出力を、到着するたびにバッチ単位で処理する必要があるためです。Emacs は一度に1つのバッチから適切なコーディングシステムを検出しようとしますが、これが常にうまくいくとは限りません。したがって、可能な限り、文字コード変換と改行変換の両方を判定するコーディングシステム(つまり、undecided や latin-1 ではなく latin-1-unix のようなもの)を指定してください。

Emacsがプロセスフィルタ関数を呼び出す際、プロセスの出力を、当該プロセスのフィルタ符号化方式に応じてマルチバイト文字列またはユニバイト文字列として提供します。Emacsはこの出力をプロセスの出力符号化方式に従ってデコードしますが、binaryやraw-textといった符号化方式を除き、通常はマルチバイト文字列が生成されます。