Unicodeのキリル文字

Unicodeと8ビットのコードを使ってLinuxにキリル文字 (その他の文字) を追加する方法

本稿では、Thomas Burger氏が、キリル文字フォントを取り上げ、Linuxでキリル文字を表示するためのいろいろな方法 (UTF-8など) について説明します。キリル文字フォントのサポートとインストールをセットアップする方法や、アプリケーションの中でキリル文字をサポートする方法などが、その具体的な内容になります。さらに、UTF-8のキリル文字フォントを使用することによって、本当の意味での最初の国際的なオペレーティング・システムになるのはLinuxであるという自説も展開しています。

Thomas Burger (twburger@bigfoot.com), Owner, Thomas Wolfgang Burger Consulting

Thomas Wolfgang Burger氏は、Thomas Wolfgang Burger Consulting社のオーナーです。1978年以来、コンサルタント、インストラクター、アナリスト、アプリケーション開発者として活躍しています。連絡先は、twburger@bigfoot.com です。



2001年 1月 01日

ソビエト連邦の崩壊によって、現在のロシアとその周辺諸国では、コンピューター産業の急成長が見られるようになりました。この地域では、経済情勢や社会情勢のために、主なオペレーティング・システムとしてLinuxが採用されるようになっています。ロシア語や他のスラブ系の言語ではキリル文字を使いますが、このキリル文字を表示するためには、KOI8-R文字セットやISO 8859-5文字セットを使用するのが最も一般的です。これらの文字セットは、ASCII互換のシステムであり、過去において十分に役割を果たしてきたのは間違いありませんが、今では翻訳や互換性の問題が生じているのも事実です。

これに対して、世界中のすべての言語を表示するための規格として新たに登場したのが、Unicodeです。マルチバイト・システムを備えたUnicodeでは、標準の交換可能形式で何万という文字が用意されています。

本稿では、Linuxベースのコンピューターで、Unicodeベースのキリル文字や他の代替文字を使用する方法を解説します。

コンピューター上のキリル文字

Linuxコンピューターでキリル文字を表示するには、基本的に4つの方法があります。つまり、KOI8-R、ISO 8859-5、Windows 1251コード・ページ、ISO 10646-1 UTF-8 Unicode 3.0の4つです。

キリル文字

キリル文字の考案者は、Clement of Ohridです。西暦863年ごろにスラブ人修道士キュリロスとメトディオスによってマケドニアで考案されたグラゴール文字をベースにして、さらに読みやすいかたちに手直ししたものがこのキリル文字です。キュリロスとメトディオスは兄弟であり、その二人に師事したのがClement of Ohridでした。グラゴール文字は、基本的にギリシャ文字を取り入れたものであり、ギリシャ文字で表せないスラブ語の音声に対して、いくつかの文字が付け加えられています。キリル文字はかなり普及し、今のようなローマ字に近い字形 (Grazhdanka) になったのは、ロシアのピョートル大帝の時代でした。現在では、ヨーロッパと西アジアの70余りの言語で使われています。

現代のキリル文字は、アクセント記号がない小型のアルファベットであり、コンピューター・インターフェース・フォントとしての使用に適しています。

KOI8-R

KOI8-Rは、「ロシア語8ビット情報交換コード」という意味のロシア語の頭文字を取った表現です。KOI8-Rコード・ページ・テーブルは、ロシアでは、旧ソビエト圏向けのインターネット・メール/ニュースやWWWといった、インタラクティブなサービスの事実上の標準規格になっています。KOI8-Rは、ロシア語と英語のために開発されたものであり、ロシア語のキリル文字だけをカバーしています。

KOI8-Rは、7ビットASCIIとの間に完全な互換性があります。キリル文字は、バイト・コードの上半分 (128~255: 16進数ではA0~FF) に置かれています。KOI8-Rの設計上の特長は、キリル文字の位置が、同じ音声を表す英語文字の位置に対応しているということです。英語文字の 'a' の8番目のビットを設定すると、キリル文字の 'a' になります。したがって、キリル文字のテキストをKOI8-Rで記述した場合は、各文字から8番目のビットを取り去ると、英語文字のテキストとして読めるようになるわけです。8番目のビットを自動的に取り去るインターネット・アプリケーション、それも特にメーラーが普及していることを考えれば、この特長には大きな意味があります。"スタートレック" の影響からか、ソフトウェア設計者たちは、この宇宙にいる人がみな英語を話すと思い込んでいるようです。

KOI8-Rのキーボード・レイアウトについては、ここをご覧ください。

ISO-8859-5

ISO 8859文字セットは、1980年代の半ばにEuropean Computer Manufacturer's Association (ECMA) が開発したものであり、現在は国際標準化機構 (ISO) の規格になっています。

Windows 1251コード・ページ

Windows 1251コード・ページは、Windowsでキリル文字を表示するためにMicrosoftが使用しているシステムです。このコード・ページにも、さらに別の規格のテーブルがあります。1251文字セットは、Windowsファイル・システムをマウントしたときに便利です。Windowsで作成したキリル文字のファイル名と互換性があります。

ISO 10646-1 UTF-8 Unicode 3.0

Unicode UTF-8コード・システムには、ISO 8859-5、Microsoftコード・ページ、CP 1251、KOI8-Rの各システムの文字セットの文字がすべて含まれています。UTF-8とは、簡単に言えば、コード・テーブルの集合であり、特定の文字について、1つの整数索引によって各テーブルを区別するようになっています。もっとも、この説明では、あまりにも簡単すぎるわけで、Unicodeは実際にはもっと複雑です。Unicodeは、あらゆる文字表示ソリューションの柔軟性と互換性を最大限に実現しています。残念ながら、Linux向けのほとんどのアプリケーションでは、このシステムをサポートしていません。

国際的なUnicode規格のISO 10646では、汎用文字セット (UCS) が定義されています。UCSとは、他のあらゆる文字セット規格のスーパーセットであり、文字セット間相互の互換性が確保されています。UCSとの間でテキスト・ストリングの変換を実行する場合、何かの情報が失われることはまったくありません。

UTF-8規格 (UCS Transformation Format) では、6~8バイトを使って文字を表示します。ほかにも、UnicodeにはUCS-2やUCS-4というシステムがあります。この2つのシステムでは、それぞれ2バイト、4バイトを使って文字を表示します。Linux/UNIX用のほとんどのツールは、16ビットや32ビットの語を文字として処理することができません。UTF-8では、ASCII文字を1バイトとして表示できます。

UTF-8では、はるかに柔軟なプログラミング機能を実現できます。WIN32のプログラミングでは、UCS-2かASCIIのいずれかがサポートされていますが、両方のサポートはありません。要するに、ソースに #define UNICODEと記述して、Unicodeで必要な場合にcharの代わりにTCHARを使うプログラムと、そうでないプログラムのいずれかしかありません。したがって、2つのバージョンのプログラムを作成する必要があります。ところが、UTF-8の場合は、1つのプログラムでASCIIとUnicodeの両方を処理できるのです。

U+007F (Unicode 128) に由来するUCS文字はすべて、エンコードされた変形マルチバイト・シーケンスで表現されます。ASCIIバイト (0x00-0x7F) が他のいずれかの文字の一部になることはないので、ASCII以外の文字を表示するマルチバイト・シーケンスは、必ず0xC0から0xFDの範囲に来ることになり、その文字のためにさらに何バイト続くのかが指定されます。マルチバイト・シーケンス内のその他のバイトはすべて、0x80から0xBFの範囲に入ります。6バイトあるとすれば、2^31のUCSコードを表示できます。だからこそ、UnicodeはPosix (Linux/UNIX) システムで活用できるわけです。

無償で入手できるLinux用のUnicodeフォントについては、参考文献をご覧ください。


文字表示システムの選択

Windows 1251には、MS Windowsとの互換性があります。ISO-8859-5は、サポート範囲が最大であり、セットアップも一番簡単です。KOI8-Rは、ロシアなどの旧ソビエト圏の国々で標準になっています。Unicodeは、将来的に、すべてのコンピューターやプラットフォームで使用されることになるでしょうし、まさに汎用の言語サポートを提供しています。

現時点で最も人気のある選択肢は、ISO-8859-5とKOI8-Rです。KOI8-Rは、ロシアで抜群の人気を誇っており、ロシア語系のテキストを処理する人であれば、この選択肢が望ましいでしょう。

KOI8-Rの問題は、汎用の規格ではないという点です。したがって、スラブ語のさまざまな特色に対応するために、おびただしい数の変種が登場しています。やがてはUnicodeが取って代わることになるでしょうが、Unicodeが優勢になるまでには数年の時間がかかるでしょう。

Unicode以外のキリル文字ソリューションでは、マルチバイト文字サポート用にLinuxを改良しなくても、スラブ語サポートをすぐに実現できます。


LinuxでUnicodeのキリル文字をセットアップする

LinuxでUTF-8 Unicodeを使用するには、UTF-8 Unicodeのエンコードとデコードができるシステムが必要です。Linuxのかなりの部分では、修正もパッチも置換もまったく不要です。catのようなバイト・ストリーム・アプリケーションは、8ビットのシーケンスを処理するだけで、エンコードについては手を付けません。文字の生成、表示、カウント、読み込みをするプログラムの場合は、UTF-8のマルチバイト・データを処理するために、UTF-8文字のエンコード/デコード用ルーチンの追加というかたちで修正が必要になります。

GnomeやKDEといったユーザー・インターフェースでは、インターフェースの画面表示を変更しなければなりません。ほとんどのLinuxディストリビューションは、出荷時の設定でUTF-8とキリル文字をサポートするようになっています。

UTF-8をサポートするためのシステムの変更内容は、Linuxをコンソール文字装置モードで使用するか、GUIのようなGNOMEやKDEを実行するかによって違ってきます。コンソール変更コマンドを実行するには、代替コンソールに切り替えて、"root" でログインする必要があります。そのためには、CTRL+ALT+ファンクション・キーを同時に押します。この操作は、GUIからも実行できます。ただし、ALT+ファンクション・キーと混同しないてください。その場合は、仮想デスクトップが変更されます。

UTF-8サポート

リスト1. フォントのセットアップ
unicode_start
set font /usr/lib/kbd/consolefonts/UniCyr_8x16.psf.gz
loadkeys /usr/lib/kbd/keymaps/i386/qwerty/ru.kmap

Unicodeの使用中は、mapscrn コマンドを使いません。

手に入るUnicodeフォントについては、次のようなテストをしてみると面白いでしょう。

リスト2. Unicodeフォントのテスト
# Test for checking the unicode maps corresponding to various fonts. Try 
for i in 01 02 03 04 05 06 07 08 09 10
do
unicode_start iso$i.f16 iso$i
less -r utflist #display this file
done
unicode_stop

8ビット文字サポート

コンソール上で文字を変更するには、適切なキーマップとフォントをそれぞれの該当するディレクトリーから読み込むスクリプト・ファイルを作成します。たとえば、次のようなスクリプト・ファイルです。

リスト3. キーマップとフォントの読み込み
if [ notset.$DISPLAY != notset. ]; then
echo "`basename $0`: cannot run under X11"
exit
fi

loadkeys /usr/lib/kbd/keymaps/i386/qwerty/ru.kmap # load the Russian keymap file
setfont /usr/lib/kbd/consolefonts/koi8-8x16.psf # Load the koi8 Cyrillic fonts
mapscrn /usr/lib/kbd/consoletrans/koi8-r.acm.gz 
echo -ne "\033(K" # This is the sequence that enables character set G0 
the mapscrn loads
#\033 is the escape character
echo -ne "\007" #beep
echo "Use the right Ctrl key to switch the mode..." #notify the user of the change

mapscrn [ -o map.orig ] mapfile コマンドは、ユーザー定義の文字マッピング・テーブルをコンソール・ドライバーに読み込むために使用します。このようにすれば、G0文字セット用にエスケープ・シーケンス "(K"、G1文字セット用にエスケープ・シーケンス ")K" (リスト3を参照) を送信して、コンソール・ドライバーをユーザー定義マッピング・テーブル・モードに設定することができます。-oオプションを指定すると、古いマップがmap.orig (またはユーザーが指定した名前) に保存されます。使用するフォントは、setfontコマンドによって指定されています。mapscrn コマンドの詳細については、参考文献を参照してください。

次に示すのは、もう1つの例です。

リスト4. G1文字マップの読み込み
setfont uni-511-14.psf
loadkeys UniBalt.kmap
mapscrn /usr/lib/kbd/consoletrans/koi8-u.acm.gz
echo -ne "\033)K"  # \033 is the escape character.)K Loads the G1 map

KOI8-Uコード・セットは、KOI8-Rと基本的に同じですが、ウクライナ語の不明瞭な記号がさらに追加されているので、KOI8-Rよりも優れているかもしれません。


フォントを読み込むためのスクリプト・ファイルを作成する

作成するスクリプト・ファイルでは、許可の属性を必ず実行可能に設定するようにしてください。代替コンソールにログインして、"./scriptname" でスクリプトを実行します。この時点で右側のCTRLキーを押すと、キリル文字が表示されます。そのキーを再び押すと、画面表示がASCIIに戻ります。"if" ステートメントでは、X11 GUIの場合にこのスクリプトの実行を禁止しています。試しにやってみれば、ファイル名と、「cannot run under X11 (X11では実行できない)」というメッセージが表示され、スクリプトが打ち切られます。

UTF-8のオン / オフの切り替えは、unicode_start コマンドとunicode_stop コマンドで実行します。これらのコマンドは、端末エミュレーション・シェルで実行しないようにしてください。実行するとシステムがクラッシュします。これらのコマンドは、kbdパッケージに用意されています。このパッケージが含まれていないディストリビューションの場合は、参考文献から、kdbとその拡張バージョン (console-tools-0.2.3パッケージ) を入手できるサイトを確認してください。

unicode_start [ font [ screen font map ] ] コマンドでは、コンソールの画面出力がUTF-8に設定され、キーボードがUnicodeモードに設定されます (詳細については、コマンド・プロンプトでman kbd_mode と入力してください)。

適切な画面フォント・マップを読み込まないと、キーボードが使用不能になることがあります。


文字フォントのインストール

文字フォントは、できるだけいろんな種類をインストールしておくほうがよいでしょう。たとえUTF-8固有のフォントでなくても、キリル文字や他の文字を表示するときに使用できます。

同じ画面に複数の言語の文字を表示するには、Unicodeコンソール・フォント・ダウンロードを使用して、いろいろなパッケージをインストールします。ダウンロードとインストールのリンクについては、参考文献をご覧ください。

たとえば、ラテン文字、キリル文字、ヘブライ文字、アラビア文字を含んだフォント (LatArCyrHeb-{08,14,16,19}.psf) もインストールできます。ISO 8859の部分として、1~6、8、9、10 (5はキリル文字) が組み込まれています。このフォントをインストールするには、まずこのフォントを/usr/lib/kbd/consolefonts/ にコピーしてから、"/usr/bin/setfont usr/lib/kbd/consolefonts/LatArCyrHeb-14.psf" を実行します。

フォントをインストールするためのコマンド

フォントのインストールは、いくつかの短い手順だけで行える簡単な作業です。次に示すのは、典型的なインストール手順です。

リスト5. フォントのインストール手順
gunzip unifont.hex.gz # uncompress the font
hex2bdf < unifont.hex > unifont.bdf # change it to bdf format
bdftopcf -o unifont.pcf unifont.bdf # create the pcf format for use
gzip -9 unifont.pcf # compress it using best method
cp unifont.pcf.gz /usr/X11R6/lib/X11/fonts/unifont # copy it to the font directory
cd /usr/X11R6/lib/X11/fonts/unifont
mkfontdir # set the font for X11 use xset fp rehash

フォントのインストールには、次のようなプログラムも使えます。

  • dumpkeys -l | less。使用可能なキーをすべて表示します。
  • mkfontdir directory。Xサーバーが使用するフォント・ディレクトリーを作成します。このコマンドは、1つのディレクトリーにフォントをインストールした後に実行する必要があります。
  • xset fp+ directory。Xサーバーの現在のフォント・パスにディレクトリーを追加します。ディレクトリーを永久的に追加するには、"Files" セクションの /etc/XF86ConfigファイルにFontPath 行を追加します。
  • xset fp rehash。Xサーバーの現在のフォント・パスにすでに含まれているディレクトリーでmkfontdirを呼び出した後に実行する必要があります。
  • xfontsel。さまざまなフォント・プロパティーを選択して、インストールされているフォントをブラウズできます。
  • xlsfonts -fn fontpattern。フォント・パターンにマッチしたすべてのフォントを一覧表示します。さらに、さまざまなフォント・プロパティーも表示します。xlsfonts -ll -fn font コマンドの場合は、フォントのエンコードを決定するフォント・プロパティーCHARSET_REGISTRYとCHARSET_ENCODINGが表示されます。

UTF-8のカット・アンド・ペースト

UTF-8コンソールでカット・アンド・ペーストを実行するには、Edmund Thomas Grimley EvansとStanislav Voronyiのパッチlinux-2.3.12-console.diffが必要です。このパッチは、ftp://ftp.ilog.fr/pub/Users/haible/utf8/linux-2.3.12-console.diffにあります。

diffファイルにパッチ・コマンドを使用すると オリジナル・ファイルに変更が加えられます。diffファイルのヘッダーには、console.cソース・コードに変更が加えられたことが明示されます。


アプリケーションでのUTF-8サポート

UTF-8は、多くのLinuxアプリケーションで十分にサポートされており、ほとんどのプログラムでは、UTF-8サポートのための設定を簡単に行えます。

多くのブラウザーでも、UTF-8を使ったHTML文書を表示するようになるでしょう。そのためには、文書のヘッダーに、次のような定義を入れる必要があります。

リスト6. HTML文書を表示するために挿入するヘッダー
<head>
		
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

すでにUTF-8に対応しているアプリケーションとしては、vi、Emacs、xeditなどのエディターがあります。これらのエディターでは、UTF-8用の設定ができます。

やはりUTF-8を使用するための特別な機能を搭載したアプリケーションとして、Mined editor(参考文献を参照) があります。ただし、makefileをLinux用に調整するのは少し面倒です。もし問題があれば、メールを送ってください。調整の方法についてご説明しましょう。

インターネット・メール・プログラムでは、UTF-8の使用でかなりの問題が発生しているようです。これは要するに、8番目のビットを絶対に取り去らないようにすることと、フォント・サポートをUnicode UTF-8に設定することだけの問題です。


結論

Unicode UTF-8は、普及度の点でも人気の点でもまだまだ物足りませんが、柔軟性の高さという点では群を抜いています。ASCIIとの互換性を保持しているのも、定評のある文字コード・セットをすべて組み込んでいるのも、Unicode UTF-8だけなのです。あと数年もすれば、Linuxのあらゆるディストリビューションの標準コード・システムとして、UTF-8が君臨することになるのは間違いありません。そのときには、Linuxこそが、ASCIIコードを処理する機能を保持しながら、本当の意味での最初の国際的なオペレーティング・システムになるのです。

参考文献

  • Linux用のUnicodeフォントは、http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz から無償で入手できます。
  • UTF-8を使用するための特別な機能を搭載したアプリケーションであるMined editorは、http://towo.net/mined/ にあります。
  • mapscrn コマンドの詳細については、http://www.man.he.net/man8/mapscrn を参照してください。
  • kbdパッケージの拡張バージョンは、ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.3.tar.gz から入手できます。
  • Unicodeコンソール・フォントのダウンロードとインストールのパッケージはftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz にあります。
  • UTF-8 UnicodeとLinuxのフォント・サポートについては、さらに多くの情報源があります。著名な専門家たちの見解を知るには、unicode@unicode.orgのメーリング・リストが一番です。unicode-request@unicode.orgに加入するには、件名を "subscribe" として、本文を "subscribe YOUR@EMAIL.ADDRESS unicode" とします。
  • linux-utf8@nl.linux.orgのメーリング・リストもあります。このメーリング・リストでは、GNU/Linuxシステムで一般に使用されているアプリケーションのためのより良いUTF-8サポートが主なテーマになっています。majordomo@nl.linux.orgに加入するには、本文に "subscribe linux-utf8" と書き込みます。さらに、linux-utf8アーカイブを閲覧するには、 http://mail.nl.linux.org/linux-utf8/ を参照してください。
  • メーリング・リスト: XlibとXサーバーのUnicodeサポートについては、fonts@xfree86.orgとi18n@xfree86.orgのメーリング・リストがあります。
  • Minedエディター (http://towo.net/mined) は、Thomas WolffのUTF-8互換エディターです。
  • KOI8-Rコード・ページは、http://koi8.pp.ru/ にあります。このサイトの目的は、KOI8-Rのサポートと普及です。KOI8-Rとは、元のロシア語で、「8ビット情報交換コード」という意味です。
  • X11用のKOI8 Cronyxキリル文字フォントは、http://koi8.pp.ru/xwin.html#xwin_fonts から入手できます。これは、KO18キリル文字フォントの公式サイトです。
  • 「GNU's Not UNIX!」は、http://www.gnu.org/ にあります。GNUプロジェクトは、UNIXのような申し分のないオペレーティング・システムを開発する目的で、1984年に立ち上げられました。開発されたのは、GNUシステムというフリーのソフトウェアです。(GNUとは、「GNU's Not UNIX (GNUはUNIXにあらず)」という標語の頭文字を取った表現であり、結果的にNUが重なっています。ちなみに「グニュー」と発音します。)
  • さらに多くのキリル文字フォントがメリーランド大学の理学部 (http://www.cs.umd.edu/) のサイトから入手できます。
  • Unicode Worldwide Character Standard (http://www..unicode.org/unicode/standard/standard.html) は、現代世界の多様な言語記述の交換、処理、表示をサポートするために考案された文字コード・システムです。Unicodeコンソーシアムでは、ソフトウェア業界の企業や研究者を結集して、国際文字エンコードの標準化に向けて、最先端の研究を行っています。
  • Linux Unicode HOWTO はJFプロジェクトにより、日本語に翻訳されています:http://www.linux.or.jp/JF/JFdocs/Unicode-HOWTO.html
  • Markus Günther Kuhnのホーム・ページには、最新の参考文献のほかに、広範囲のUnicode Posixリソース・リスト (http://www.cl.cam.ac..uk/~mgk25/unicode.html) やフォントhttp://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html が用意されています。科学の分野における同氏の関心は、コンピューター・セキュリティー、ハードウェア・セキュリティー、暗号研究、Steganography、知的所有権保護テクノロジーなどに及んでいます。
  • 「Unicode Standard, Version 3.0」(Addison-Wesley、2000年) は、フォントと文字セットに関する定番の教科書です。 http://www.amazon.com/exec/obidos/ASIN/0201616335/mgk25 を参照してください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology, Linux
ArticleID=290620
ArticleTitle=Unicodeのキリル文字
publish-date=01012001