次: , 前: MS-DOS Printing, 上: MS-DOS


C.6 MS-DOSでの国際化対応

MS-DOS上のEmacsは、UNIXや他のプラットフォーム上と同じ 国際化文字集合を扱えます(see International)。 これには、異なる文字集合のあいだの変換を行うコーディングシステムも含みます。 しかしながら、MS-DOS/MS-WindowsとUNIXとの非互換性に起因する DOSに固有な特色があり、ユーザーは理解しておく必要があります。 本節では、これらの特色について述べます。

M-x dos-codepage-setup
Emacs画面とコーディングシステムを カレントDOSコードページに適したものに設定する。
M-x codepage-setup
特定のDOSコードページ用のコーディングシステムを作成する。

MS-DOSは、一度には256文字から成る単一の文字集合を扱えるように 設計されていますが、さまざまな文字集合から選択できます。 代替文字集合は、DOSコードページと呼ばれます。 各コードページは、128個の全ASCII文字を含みますが、 残りの128文字(コード128〜255)は、コードページごとに異なります。 各DOSコードページは、850や862などの3桁の数字で識別します。

同時に複数のフォントを使えるXウィンドウに比べると、 MS-DOSでは1つのセッションでは複数のコードページを使えません。 MS-DOSはシステムブート時に単一のコードページをロードします。 コードページを変更するにはMS-DOSをリブートする必要があります 1。 MS-Windowsなどの他のシステムでDOSプログラムを実行する場合にも、 同様の制約が課せられます。

MS-DOS上でオプション`--unibyte' (see Initial Options)を指定してEmacsを起動すると、 Emacsは、いかなる変換も非ASCII文字には行いません。 非ASCII文字はそのまま読み書きし、 画面には8ビットコードをそのまま送ります。 つまり、MS-DOS上のユニバイトEmacsは、 なんであれカレントコードページを使いますが、 それ以外の文字を表現することはできません。

MS-DOS上でのマルチバイト操作には、 Emacsは、選択されているDOSコードページで表示できる文字群を 知っておく必要があります。 そのため、起動後、選択しているコードページ番号をシステムに問い合わせ、 変数dos-codepageにその番号を保存します。 実際に使っているコードページとは異なっていても、 カレントコードページのデフォルト値437を返すシステムもあります。 (典型的には、ディスプレイ装置に組み込まれたコードページを使用すると 発生する。) 個人の初期化ファイルで変数dos-codepageを設定すれば、 Emacsが使うコードページ(番号)を別のものに指定できる。

マルチバイトEmacsは、特定のDOSコードページだけを扱えます。 これらには、日本語用コードページ932のような極東の文字を表示できものや、 単一のISO 8859文字集合を符号化できるものが含まれます。

極東用コードページは、 それらの国々用のMULE文字集合の1つを直接表示できますから、 Emacsは、コードページで扱える 適切な端末コーディングシステムを設定するだけです。 本節の残りで述べる特別な機能は、 ISO 8859文字集合を符号化するコードページに関することです。

ISO文字集合の1つに対応したコードページに対しては、 Emacsはコードページ番号に基づいた文字集合名を知っています。 Emacsは、カレントコードページを用いたファイルの読み書きを扱う コーディングシステムを自動的に作成し、 デフォルトでこのコーディングシステムを使います。 コードページ番号をnnnとすると、このようなコーディングシステムの 名前はcpnnnです。 2

すべてのcpnnnコーディングシステムは、 モード行の表示に(『DOS』の)文字`D'を使います。 端末コーディングシステムとファイル入出力用のデフォルトの コーディングシステムは、起動時に、 正しくcpnnnコーディングシステムに設定されますから、 MS-DOSでは、モード行は普通`-DD\-'で始まります。 See Mode Line。 極東用DOS端末は、cpnnnコーディングシステムを使用せず、 そのため、初期のモード行はUNIXのようになります。

コードページ番号は、使用する文字群を指定しますから、 Emacsは、その文字群用の言語環境を選択するために set-language-environmentを自動的に実行します (see Language Environments)。

バッファ内に異なるISO 8859文字集合に属する文字、 すなわち、選択しているDOSコードページで扱えない文字が含まれる場合、 Emacsはその文字をASCII文字の列で表示します。 たとえば、カレントコードページに文字`ò' (アクサングレーブ付きの小文字の`o')の字形がないときには、 中括弧で囲って1文字であることを表して、 `{`o}'と表示します。 (このようにすると、ギリシャ文字やヘブライ文字などの非Latin文字のなかには、 とても見難くなるのもがあるが、その言語を知っている人には 少なくとも読める。) 1文字でも画面上は数桁を占めますが、 実際には単一の文字であり、Emacsのすべてのコマンドも1文字として扱います。

DOSコードページ内のすべての文字がISO 8859文字に対応するわけではなく、 箱を描くための文字や他の図形用文字もあります。 Emacs内部ではこれらの文字を表現できませんので、 これらの文字を含んだファイルを読み込むと、 これらの文字は、変数dos-unsupported-character-glyphで指定した 特定の文字コードに変換されます。

Emacsは、ISO 8859以外の他の多く文字集合を扱えますが、 それらをMS-DOS上では表示できません。 そのようなマルチバイト文字がバッファ内にあると、 MS-DOS上のEmacsは、変数dos-unsupported-character-glyphの 指定どおりに表示します。 デフォルトでは、その字形は、白抜きの三角形です。 コマンドC-u C-x =を使って、そのような文字の 実際の文字コードと文字集合を表示してください。 See Position Info

デフォルトでは、Emacsはカレントコードページを扱えるコーディングシステムを 定義します。 (他国のDOSマシンで書いたファイルを訪問するなどの) 他のコードページ用のコーディングシステムを定義するには、 コマンドM-x codepage-setupを使います。 これは、3桁のコードページ番号を問い合わせてきますが、補完を使えます。 そして、指定したコードページ用のコーディングシステムを作成します。 これで、新たなコーディングシステムを使ってファイルを読み書きできますが、 このコーディングシステムを使うには、 ファイルコマンドで明示する必要があります(see Specify Coding)。

これらのコーディングシステムは、 DOSコードページで符号化したファイルを 他のオペレーティングシステム上のEmacsで訪問する場合にも利用できます。


脚注

[1] 通常、1つの特定のコードページはディスプレイメモリに組み込んであり、 他のコードページは、CONFIG.SYSなどの システム設定ファイルを変更してリブートするとインストールできる。

[2] ISO 8859用のEmacsの標準コーディングシステムは、 この目的には正しくない。 というのは、典型的なDOSコードページは、標準のISO文字集合に一致しない。 たとえば、文字`ç'(セディーユ付きの`c')は、 標準のLatin-1文字集合ではコード231であるが、 対応するDOSコードページ850ではこの文字はコード135である。