文字コード変換(character code conversion)により、Emacs内部で使用される文字の内部表現と他のエンコーディングの間で変換が行われます。Emacsは多くの異なるエンコーディングをサポートしており、それらは双方向に変換が可能です。たとえばLatin 1、Latin 2、Latin 3、Latin 4、Latin 5、およびいくつかのISO 2022の変種等のようなエンコーディングにたいしてテキストを双方向に変換できます。あるケースにおいては同じ文字にたいしてEmacsは複数のエンコーディング候補をサポートします。たとえばキリル(ロシア語)のアルファベットにたいしてはISO、Alternativnyj、KOI8のように3つにコーディングシステムが存在します。
コーディングシステムはそれぞれ特定の文字コード変換セットを指定しますが、undecidedというコーディングシステムは特別です。これはファイル(や文字列)にたいしてデコードやエンコードを行う際に、そのファイル(や文字列)のデータにもとづいて発見的に選択が行われるように、選択を未指定のままにします。コーディングシステムprefer-utf-8はundecidedと似ていますが、可能ならutf-8を優先的に選択します。
一般的にコーディングシステムは可逆的な同一性を保証しません。あるコーディングシステムを使用してバイトシーケンスをデコードしてから、同じコーディングシステムで結果テキストをエンコードしても、異なるバイトシーケンスが生成される可能性があります。しかしデコードされたオリジナルのバイトシーケンスとなることを保証するコーディングシステムもいくつかあります。以下にいくつかの例を挙げます:
iso-8859-1、utf-8、big5、shift_jis、euc-jp
バッファーテキストのエンコードと結果のデコードでもオリジナルテキストの再生成に失敗する可能性があります。たとえばその文字をサポートしないコーディングシステムで文字をエンコードした場合の結果は予測できず、したがって同じコーディングシステムを使用してそれをデコードしても異なるテキストが生成されるでしょう。現在のところEmacsは未サポート文字のエンコーディングによる結果をエラーとして報告できません。
End of line conversion handles three different conventions used on various systems for representing end of line in files. The Unix convention, used on GNU and Unix systems, and macOS, is to use the linefeed character (also called newline). The DOS convention, used on MS-Windows and MS-DOS systems, is to use a carriage return and a linefeed. The Mac convention, used in Classic Mac OS and now rare outside of legacy software, is to use just carriage return.
latin-1のようなベースコーディングシステム(base coding systems:
基本コーディングシステム)では、データにもとづいて選択されるように行末変換は未指定となっています。latin-1-unix、latin-1-dos、latin-1-macのようなバリアントコーディングシステム(variant
coding systems:
変種コーディングシステム)では行末変換を明示的に指定します。ほとんどのベースコーディングシステムは‘-unix’、‘-dos’、‘-mac’を追加した3つの対応する形式の変種をもちます。
raw-textは文字コード変換を抑制して、このコーディングシステムでvisitされたバッファーがユニバイトバッファーとなる点において特殊なコーディングシステムです。歴史的な理由によりこのコーディングシステムによりユニバイトとマルチバイト両方のテキストを保存できます。マルチバイトテキストのエンコードにraw-textを使用した際には1文字コード変換を行います。8ビット文字は1バイトの外部表現に変換されます。raw-textは通常のようにデータにより判断できるように行末変換を指定せず、通常のように行末変換を指定する3つの変種をもちます。
no-conversion
(とエイリアスのbinary)はraw-text-unixと等価です。これは文字コードおよび行末にたいする変換をいずれも指定しません。
utf-8-emacsはデータがEmacsの内部エンコーディング(テキストの表現方法を参照)で表されることを指定するコーディングシステムです。コード変換が何も発生しない点でraw-textと似ていますが、結果がマルチバイトデータである点が異なります。
emacs-internalという名前はutf-8-emacs-unixにたいするエイリアスです(そのため3種類すべての行末変換をデコードするutf-8-emacsと異なり行末変換を強制しない)。これはEmacsのバッファーおよび文字列がサポートするすべての文字を表すことができるコーディングシステムなので、キャッシュのような内部的な用途向けにテキストを保存するときには、常にこれを使用することをお勧めする。
この関数はコーディングシステムcoding-systemの指定されたプロパティをリターンする。コーディングシステムのプロパティのほとんどは内部的な目的のために存在するが、:mime-charsetについては有用と思うかもしれない。このプロパティの値はそのコーディングシステムが読み書きできる文字コードにたいしてMIME内で使用される名前。以下は例:
(coding-system-get 'iso-latin-1 :mime-charset)
⇒ iso-8859-1
(coding-system-get 'iso-2022-cn :mime-charset)
⇒ iso-2022-cn
(coding-system-get 'cyrillic-koi8 :mime-charset)
⇒ koi8-r
:mime-charsetプロパティの値はそのコーディングシステムにたいするエイリアスとしても定義されている。
この関数はcoding-systemのエイリアスのリストをリターンする。