さまざまな言語のユーザーは、多少の差はあれ、それらを表示するための標準のコーディングシステムを確立しています。Emacsはこれらのコーディングシステムを、内部的に使用しません。データを読み込むときは、さまざまなコーディングシステムからEmacs独自のコーディングシステムに変換し、データを書き込むときには、内部コーディングシステムから他のコーディングシステムに変換します。ファイルの読み書き、端末とのやりとり、サブプロセスとのデータ交換において、変換が可能です。
Emacsは各コーディングシステムに名前を割り当てます。ほとんどのコーディングシステムは、1つの言語で使用され、コーディングシステムの名前は、言語の名前で始まります。複数の言語で使用されるコーディングシステムもあります。これらのコーディングシステムの名前は、通常‘iso’で始まります。no-conversion
、raw-text
、emacs-internal
のような特別なコーディングシステムもあります。
まとめてコードページ(codepages)として知られる、特別なクラスのコーディングシステムは、MS-WindowsおよびMS-DOSのソフトウェアーによりエンコードされたテキストをサポートするためにデザインされています。これらのコーディングシステムの名前はcpnnnn
という形式で、nnnnは3桁から4桁のコードページ番号です。これらのコーディングもほかのコーディングシステムと同様に使うことができます。たとえばコードページ850でエンコードされたファイルをvisitするには、C-x
RET c cp850 RET C-x C-f filename RETとタイプします。
非ASCII文字のさまざまな表現の変換に加えて、コーディングシステムは行末変換(end-of-line conversion)も行います。Emacsは、ファイル内の行の区切り方として、3つの異なる変換を扱います。つまり、改行(Unix)、復帰改行(DOS)、復帰(Mac)です。
コーディングシステムcodingの説明を表示します(describe-coding-system
)。
カレントで使用しているコーディングシステムcodingの説明を表示します(describe-coding-system
)。
サポートされているすべてのコーディングシステムのリストを表示します。
コマンドC-h C
(describe-coding-system
)は、特定のコーディングシステムについて、それらのコーディングシステムで規定されている、行末変換も含めた情報を表示します。引数にコーディングシステム名を指定できます。引数が空のときには、さまざまな目的のために選択されている、現在のコーディングシステムの、カレントバッファにたいするものとデフォルトの両方について表示するとともに、コーディングシステムを認識するための優先順位表を表示します(コーディングシステムの認識を参照してください)。
サポートされているすべてのコーディングシステムのリストを表示するには、M-x list-coding-systemsとタイプします。表示されるリストは、モードラインに表示される文字も含めて、各コーディングシステムの情報を提供します。
リストに表示される各コーディングシステム — ただし何の変換も行わないno-conversion
は除く —
は、プリントする文字をどのように変換するか、しないかを指定しますが、改行変換については、各ファイル内容にもどづいて決定するので選択をしません。たとえばファイルが行区切りに改行復帰文字を使っているように見えるときは、DOSの改行変換を使います。
リストされた各コーディングシステムは、改行変換を厳密に指定する3つの変種があります。
…-unix
何の改行変換も行いません。ファイルは行区切りに改行文字を使っていると仮定します(これは通常Unix、GNUシステム、macOSで使われている慣習です)。
…-dos
ファイルが行区切りに改行復帰文字を使っていると仮定し、適切な変換を行います(これは通常Microsoftシステムで使われている慣習です9)。
…-mac
ファイルが行区切りに復帰文字を使っていると仮定し、適切な変換を行います(これはクラシックな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のその他の機能を抑制します。ファイルのvisit(訪問)を参照してください。
コーディングシステムemacs-internal
(またはutf-8-emacs
)は、Emacs内部エンコーディングのままで格納された、非ASCII文字を含むファイルであることを意味します。これは出会ったデータに基づいて行末変換を処理し、行末変換の種類を指定する通常の3つの変種を持ちます。
これはMIMEの‘text/*’の本体、および他のネットワーク転送のコンテキストでも指定されています。これはEmacsが直接サポートしないSGMLリファレンス構文のrecord-start/record-endとは異なります。