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

24.5 コーディング体系

さまざまな言語の利用者は、それらを表現するために、ほぼ標準的な符号化方式を確立しています。Emacs は内部的にこれらの符号化方式を使用しません。代わりに、データを読み込む際にはさまざまな符号化方式から独自の方式に変換し、データを書き込む際には内部の符号化方式を他の符号化方式に変換します。変換は、ファイルの読み書き、端末との送受信、およびサブプロセスとのデータ交換において可能です。

Emacsでは、各コーディングシステムに名称が割り当てられています。ほとんどのコーディングシステムは単一の言語に使用され、その名称は言語名で始まります。複数の言語に使用されるコーディングシステムもあり、それらの名称は通常 ‘iso’ で始まります。また、no-conversion、raw-text、emacs-internal といった特殊なコーディングシステムも存在します。

コードページと総称される特殊な種類の符号化方式は、MS-WindowsおよびMS-DOSソフトウェアで符号化されたテキストをサポートするように設計されています。これらの符号化方式の名称はcpnnnnであり、nnnnはコードページを示す3桁または4桁の数字です。これらの符号化方式は、他の符号化方式と同様に使用できます。例えば、コードページ850で符号化されたファイルにアクセスするには、C-x RET c cp850 RET C-x C-f filename RETと入力します。

コーディングシステムは、非ASCII文字のさまざまな表現を変換するだけでなく、行末の変換も行うことができます。Emacsでは、ファイル内での行の区切り方として、newline(Unix)、キャリッジリターンに続くラインフィード(DOS)、およびキャリッジリターンのみ(Mac)という3つの異なる規約に対応しています。

C-h C coding RET

コーディングシステム coding (describe-coding-system) について説明してください。

C-h C RET

現在使用されているコーディングシステムについて説明してください (describe-coding-system)。

M-x list-coding-systems

サポートされているすべてのコーディングシステムの一覧を表示します。

コマンド C-h C (describe-coding-system) は、特定のコーディングシステムに関する情報(当該コーディングシステムで指定されている行末変換を含む)を表示します。引数としてコーディングシステム名を指定できるほか、引数を空にした場合は、現在のバッファおよびデフォルト設定の両方で各種目的のために現在選択されているコーディングシステムと、コーディングシステムを認識するための優先順位リストが表示されます(コーディングシステムの認識を参照)。

サポートされているすべてのコーディングシステムの一覧を表示するには、M-x list-coding-systems と入力してください。この一覧には、モードラインで各システムを表す文字(モードラインを参照)を含む、各コーディングシステムに関する情報が記載されています。

このリストに記載されている各コーディングシステムは—いかなる変換も行わないことを意味するno-conversionを除き—、印字文字をどのように、また変換するか否かを規定していますが、行末変換の選択については各ファイルの内容に基づいて決定されるものとします。例えば、ファイル内で行の区切りにキャリッジリターンとラインフィードのシーケンスが使用されていると思われる場合は、DOSの行末変換が使用されます。

記載されている各コーディング体系には3つのバリエーションがあり、行末変換において具体的にどう処理すべきかが規定されています。

…-unix

行末変換は行わないでください。ファイルでは改行文字で行を区切っていると想定してください。(これはUnix、GNUシステム、およびmacOSで通常用いられている慣習です。)

…-dos

ファイル内で行の区切りにキャリッジリターンに続いてラインフィードが使用されていると想定し、適切な変換を行ってください。(これは通常、Microsoftシステムで採用されている規約です。11)

…-mac

ファイル内で改行にキャリッジリターンが使用されていると想定し、適切な変換を行ってください。(これはClassic Mac OSで採用されていた慣習ですが、現在ではレガシーソフトウェア以外では稀です。)

これらのバリアント符号化方式は、完全に予測可能であるため、簡潔にするためlist-coding-systemsの表示からは省略されています。例えば、符号化方式iso-latin-1には、バリアントiso-latin-1-unix、iso-latin-1-dos、およびiso-latin-1-macがあります。

コーディングシステム unix、dos、および mac は、それぞれ undecided-unix、undecided-dos、および undecided-mac のエイリアスです。これらのコーディングシステムは行末変換のみを規定しており、文字コード変換についてはテキスト自体から推論されるものとします。

コーディングシステム raw-text は、主に ASCII テキストで構成され、かつ ASCII 以外の文字をエンコードすることを意図していない 127 を超えるバイト値が含まれる可能性のあるファイルに適しています。raw-text では、Emacs はこれらのバイト値をそのままコピーし、適切に解釈されるよう、現在のバッファ内で enable-multibyte-characters を nil に設定します。raw-text は、検出されたデータに基づいて通常の方法で改行変換を行い、使用する改行変換の種類を指定するための通常の 3 つのバリエーションを備えています。

これに対し、コーディングシステム no-conversion では文字コード変換を一切指定していません—非ASCIIバイト値に対しても、行末に対しても変換を行いません。これは、バイナリファイルやtarファイル、その他そのままの状態で確認する必要があるファイルの読み書きに有用です。また、このシステムでも enable-multibyte-characters は nil に設定されます。

一切の変換を行わずにファイルを編集する最も簡単な方法は、M-x find-file-literallyコマンドを使用することです。これはno-conversionを利用し、また、内容を確認する前にファイルの内容を変換してしまう可能性のある他のEmacs機能も抑制します。ファイルの参照を参照してください。

コーディングシステム emacs-internal(または同等の utf-8-emacs)は、ファイルにEmacsの内部エンコーディングで格納された非ASCII文字が含まれていることを意味します。このコーディングシステムは、遭遇したデータに基づいて改行コードの変換を行い、改行コードの種類を指定するための通常の3つのバリエーションを備えています。


脚注

(11)

また、MIMEの‘text/*’ボディや、その他のネットワークトランスポートのコンテキストでも規定されています。これは、Emacsが直接サポートしていないSGMLの参照構文であるrecord-start/record-end形式とは異なります。