Next: , Up: 国際化文字セットのサポート   [Contents][Index]


23.1 国際化文字セットのイントロダクション

国際化文字セットとスクリプトのユーザーは、ファイルを保存するために、多少の差はありますが、標準化された多くのコーディングシステムを確立しています。これらのコーディングシステムは通常はマルチバイト(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コマンドを追加で呼び出します:

以下は例です(マニュアルに収まるように折り返している行もあります):

             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' '^')