国際化文字セットとスクリプトのユーザーは、ファイルを保存するために、多少の差はありますが、標準化された多くのコーディングシステムを確立しています。これらのコーディングシステムは通常はマルチバイト(multibyte)で、これは1つの非ASCII文字を表すのに、2つ以上のバイトシーケンスを対応させることを意味します。
Emacsは、内部的にはUnicode標準のスーパーセットである、マルチバイト文字エンコーディングを使用します。この内部的なエンコーディングは、ほとんどすべての既知のスクリプトを、1つのバッファーまたは文字列に混成することを可能にします。Emacsはファイルを読み書きしたり、サブプロセスとデータをやりとりするとき、このマルチバイト文字エンコーディングと、他のさまざまなコーディングシステムをコード変換します。
コマンドC-h h
(view-hello-file
)は、ファイルetc/HELLOを表示します。これは、多くの異なる言語で、“hello”をどのように記述するかを、さまざまな文字で例示するファイルです。もしもある文字が端末で表示できないときは、それらの文字は‘?’か、中抜きのボックスで表示されます。
これらの文字セットを使う国のキーボードでも、一般的にはすべての文字に対応するキーはもっていません。キーボードがサポートしない文字は、C-x 8
RET (insert-char
)を使って挿入することができます。テキストの挿入を参照してください。一般的な文字のいくつかは略記が利用できます。たとえばC-x 8 [とタイプ(Electric
Quoteモードでは、通常は単に`とタイプ)することにより、left single quotation mark
‘
を挿入できます。Emacsはさまざまなインプットメソッド(IM: input
methods)をサポートします。これはあるスクリプトの文字をタイプするのを簡単にするもので、通常1つのスクリプトまたは言語に1つです。インプットメソッドを参照してください。
プレフィクスキーC-x RETは、マルチバイト文字、コーディングシステム、インプットメソッドに属するコマンドにたいして使用されます。
コマンドC-x =
(what-cursor-position
)は、ポイント位置にある文字の情報を表示します。文字の位置に加えて、カーソル位置の情報で説明したように、このコマンドはその文字がどのようにエンコードされているかを表示します。たとえば、このコマンドは文字‘c’に大して、以下のような行をエコーエリアに表示します:
Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53
‘Char:’の後ろの4つの値は、ポイント位置の文字を説明するためのもので、1つ目はその文字自身、その後ろに文字コードを10進(decimal)、8進(octal)、16進(hex)で表示します。非ASCIIのマルチバイト文字の場合、バッファーのコーディングシステムでその文字を安全に1バイトでエンコードできる場合は、‘file’とそのバッファーのコーディングシステムで表した文字コードの16進表記が続きます。その文字のエンコーディングが1バイトより長い場合、Emacsは‘file ...’と表示します。
Emacsがrawバイト(raw
bytes)に遭遇する場合がまれにあります。rawバイトとは、既知の非ASCII文字エンコーディングとしてEmacsが解釈できない、値128(8進0200)から255(8進0377)の範囲の単一バイトのことです。そのようなrawバイトは、特別な文字セットeight-bit
に属すものとして扱われます。Emacsはそれらをエスケープされた8進コードで表示します(これはカスタマイズ可能。ディスプレイのカスタマイズを参照されたい)。この場合、C-x
=は‘file’のかわりに‘raw-byte’を示します。加えて、C-x
=はそれらがあたかもEmacsが範囲#x0080..#x00FF
のユニコード文字から区別するためにマップする範囲#x3FFF80..#x3FFFFF
にあるかのようにrawバイトの文字コードを表示します。
プレフィクス引数を指定した(C-u C-x
=)では、その文字の詳細な情報をウィンドウに表示するdescribe-char
コマンドを追加で呼び出します:
ascii
文字セットに属すると識別されます。
以下は例です(マニュアルに収まるように折り返している行もあります):
position: 1 of 1 (0%), column: 0 character: ê (displayed as ê) (codepoint 234, #o352, #xea) preferred charset: unicode (Unicode (ISO10646)) code point in charset: 0xEA script: latin syntax: w which means: word category: .:Base, L:Left-to-right (strong), c:Chinese, j:Japanese, l:Latin, v:Viet to input: type "C-x 8 RET ea" or "C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX" buffer code: #xC3 #xAA file code: #xC3 #xAA (encoded by coding system utf-8-unix) display: by this font (glyph code) xft:-PfEd-DejaVu Sans Mono-normal-normal- normal-*-15-*-*-*-m-0-iso10646-1 (#xAC) Character code properties: customize what to show name: LATIN SMALL LETTER E WITH CIRCUMFLEX old-name: LATIN SMALL LETTER E CIRCUMFLEX general-category: Ll (Letter, Lowercase) decomposition: (101 770) ('e' '^')