次: , 前: Multibyte Conversion, 上: International


16.7 コーディングシステム

さまざまな言語を使うユーザーは、 それらを表現するための標準的な コーディングシステムを数多く確立してきました。 Emacsはこれらのコーディングシステムを内部的には使用しません。 そのかわり、データを読むときには、 さまざまなコーディングシステムからEmacs独自のコーディングシステムに変換し、 データを書くときには、 内部コーディングシステムから他のコーディングシステムに変換します。 ファイルの読み書き、端末とのやりとり、サブプロセスとのデータ交換において、 変換できます。

Emacsは各コーディングシステムに名前を付けています。 多くのコーディングシステムは、1つの言語で使用されるので、 コーディングシステムの名前は、言語の名前で始まります。 いくつかのコーディングシステムは、いくつもの言語で使用されます。 その場合、コーディングシステムの名前は、通常、`iso'で始まります。 印字文字をまったく変換しない特別なコーディングシステム、 no-conversionraw-textemacs-muleもあります。

非ASCII文字のさまざまな表現形の変換に加えて、 コーディングシステムは行末変換も行います。 Emacsは、ファイル内の行の区切り方として、 3つの異なる変換を扱えます。 つまり、改行、復帰改行、復帰です。

C-h C coding <RET>
コーディングシステムcodingを説明する。
C-h C <RET>
現在使用しているコーディングシステムを説明する。
M-x list-coding-systems
使用可能なすべてのコーディングシステムの一覧を表示する。

コマンドC-h Cdescribe-coding-system)は、 特定のコーディングシステムについての情報を表示します。 引数にコーディングシステム名を指定できます。 あるいは、引数が空のときには、 カレントバッファに対するものとデフォルトの両方について、 さまざまな目的のために選択されている現在のコーディングシステムと、 コーディングシステムを認識するための優先順位表を説明します。 (see Recognize Coding)。

利用可能なすべてのコーディングシステムの一覧を表示するには、 M-x list-coding-systemsと打ちます。 モード行に表示される文字を含めて、 各コーディングシステムについての情報の一覧を表示します(see Mode Line)。

いかなる種類の変換も行わないno-conversionを除いて、 この一覧に現れる各コーディングシステムは 印字文字をどのように変換する/しないを指定します。 しかし、行末変換は、各ファイルの内容に基づいて決定されます。 たとえば、ファイルが行区切りに復帰改行を使用しているように思われるときには、 その行末変換を使います。

一覧の各コーディングシステムには、 どのように行末変換するかを正確に指定する3つの変種があります。

...-unix
行末変換を行わない。 ファイルでは、行区切りに改行を使用していると仮定する。 (これは、UNIXとGNUシステムで普通に使用される変換。)
...-dos
ファイルでは、行区切りに復帰改行を使用していると仮定し、適当な変換を行う。 (これは、Microsoftシステムで普通に使用される変換。 1
...-mac
ファイルでは、行区切りに復帰を使用していると仮定し、適当な変換を行う。 (これは、Machintoshシステムで普通に使用される変換。)

これらのコーディングシステムの変種は、 完全に予想できるのでlist-coding-systemsの表示からは 簡潔にするために除かれています。 たとえば、コーディングシステムiso-latin-1には、 iso-latin-1-unixiso-latin-1-dosiso-latin-1-mac の変種があります。

コーディングシステムraw-textは、 主にASCIIテキストのファイルに適していますが、 ファイルには、非ASCII文字の符号を意味しない127を越えるバイト値が 含まれるかもしれません。 raw-textでは、 Emacsは、それらのバイトが適切に解釈されるように値を変更しないでコピーし、 カレントバッファの enable-multibyte-charactersnilを設定します。 raw-textは、出会ったデータに基づく普通の方法で行末変換を処理し、 使用する行末変換を指定する3つの変種を持ちます。

対照的に、コーディングシステムno-conversionは、 非ASCIIバイト値と行末に対して、いかなる文字コード変換も指定しません。 これは、バイナリファイル、tarファイル、 そのまま処理する必要があるその他のファイルを読み書きするのに便利です。 これも、enable-multibyte-charactersnilを設定します。

いかなる種類の変換もしないでファイルを編集するもっとも簡単な方法は、 M-x find-file-literallyコマンドを使うことです。 このコマンドは、no-conversionを使い、 あなたがファイルを見るまえにファイルの内容を 変換するかもしれないEmacsのその他の機能を抑制します。 See Visiting

コーディングシステムemacs-muleは、 Emacs内部の符号化のままで格納された非ASCII文字を 含むファイルであることを意味します。 これは、出会ったデータに基づいて行末変換を扱い、 行末変換の種類を指定する通常の3つの変種を持ちます。


脚注

[1] MIMEの「text/*」の本体や、 他のネットワーク転送の場面でも指定される。 Emacsが直接には扱えない SGMLの参照構文であるrecord-start/record-end書式とは異なる。