ユニコード / 符号化法 - コンピュータとアラビア語

ホームに戻る.

ルール: ユニコードを使いましょう
アラビア文字に関しては、ユニコード、わけても utf-8 を使いましょう.

(2006 年 7 月 Oibane) 先日、あるメーリングリスト (英語) で、 cp1256 のメールが流れた後で、「自戒も込めて、どうか、お願いだから、何が何でも、どこのコミュニティでも、メール、文書、データには utf-8 を使う事を思い出して下さい. cp1256 のサポートをコンピュータから消す事. 」という注意が来ました. (消せるんでしょうか、知りませんが. )

文字セット、符号化
文字セット (character set, charset) と符号化 (encoding) について、最初に説明するのが正しい道筋ですが、省略します. 知らなくてもコンピュータでアラビア語は使えます. ユニコードの場合は、ユニコード自体が文字セット (これは一つしかない) で、utf-8, utf-16 などは、いくつかある符号化法の例です.

符号化は encoding が正しい語ですが、code, coding, encode, encoding の四つの語は、しばしば混用されているようです. このページでも、あまり気にかけません.

アラビア文字特有の符号化事情
アラビア文字にコードを割振る際、次のような問題があります. 即ち、アラビア語としてはバーはバーですが、印刷物等、視覚的な実現では、語頭形、語中形、語尾形か、独立形かで、都合四つの形があります. (もちろん、もっと複雑な合字 ligature もあります)

実際のところ、覚えておかなければいけない事は、単純です. つまり、以下で紹介するコーディングの内、「その他」で取り上げたものを除けば、いずれも、「バーは一つ」という方式です. あくまでも「バー」であり、「独立形のバー」ではありません. 念のため.

ユニコード
2006 年 11 月の時点では、最新のユニコードは 5.0 です. まだ詳しい資料を配布しておらず、4.1.0 からの変更点はよく分かりません.

(2006 年、ユニコード 5.0) ユニコードのアラビア文字の部分は、日常においては、ひどく気になる問題はありません. (エジプトで語尾のヤーには点を打たない事による問題はいくらかあるようです. )しかし定義に欠陥があり、たとえばクルアーンをどう符号化するか、という点では曖昧さが残ります. 更に、アラビア語以外の、アラビア文字を使う言語まで含めると、根本的な見直しが必要なように思われます.

ユニコードの問題点のいくつかについては、ヤー、ハムザの問題のページに書いておきます.

ユニコード は、古今東西の全ての文字、記号を網羅しようという思想なので、このページで紹介する、他の全てのエンコーディングに含まれる文字は、当然ユニコードに含まれます. 短剣アリフやワスラ記号は、ユニコードで初めて取り上げられたようです. なお、専門家以外は、ユニコードと ISO-10646 は同義語と思って良いです.

ユニコードでは、文字に通し番号を振って、例えばアラビア文字のアリフを、16 進数で U+0627 と呼びます. しかし、ファイルに文字を保存をする時に、この番号を直截使う訳ではありません. 実際のファイル中においてユニコードを表現する方法、すなわち符号化として、utf-8, utf-16, utf-32 等があります. これらのいずれで表わされた文書も、一切情報を失う事無く、別の一つに変換できます. ですから、「utf-xxx で書いてある」も「ユニコードで書いてある」も、ほぼ同義語です. 実際には、utf-8 が最も良く使われ、サポートも良いようです. アスキー文字だけならば 8 ビット (7 ビット) で表わされて、互換性がある為です.

規格文書の入手

 * U+0600 - U+06FF (基本区画)
 * 文字の表です. 必須. アラビア語以外の多くの言語で使われるアラビア文字も、大半はこれに含まれます.


 * ユニコード規格 8 章
 * アラビア文字に関する規格は、ユニコード 4.1.0 では 8 章 2 節で定められています. 普段は必要ないと思いますが、疑問があったらこれを読むと良いかも知れません. (最新版 5.0.0 の規格文書はオンラインでは未出版)


 * U+0750 - U+077F (アラビア文字補足)
 * 基本区画におさまりきらなかった文字はここに収録. アラビア語の文字はありません.

以下は、技術者向けです.


 * U+FB50 - U+FDFF (表現形 A)
 * U+FE70 - U+FEFF (表現形 B)
 * The Bidirectional Algorithm Unicode Standard Annex #9. Bidi アルゴリズムの定義.
 * Unicode Normalization Forms Unicode Standard Annex #15. 正規化を定義.
 * ArabicShaping: 各文字の Bidi 的な性質が記載. 本来の用法に加え、古いバージョンを見ると、追加された文字等の変更が分かるので便利.

合字 (ligature)
まず、ナスヒー体に限ると、アラビア語では必須の合字ラーム・アリフがあり、他にしてもしなくても良い合字・変形があります. これらはあまりに多く、列挙すら難しいです. 上にも書いた通り、ユニコードでは、 بيت を「バー、ヤー、ター」と記録します. 文字の形は含まれません. という事は、合字を指定する方法はありません. それはフォントの提供するものであったり、場合によっては描字エンジンのウリとなります. 合字は美的に、あるいは単に気分的に望ましい場合も多々ありますが、現実にはあまりサポートされていません.

合字などをユニコードの規格に含めない立派な理由があります. それは、ナスヒー体以外のあまたの書体のルールまでは、規定しきれないからです. 書道は、符号化の管轄外です.

表現型とは
特に必要がなければ、この節は飛ばして下さい. 表現型について説明します. フォントのページの、フォントと表現型の節も御覧下さい.

表現型 A は、たとえば語頭のター・ジームの合字 (ligature) の類の集合で、表現型 B は、各アリフバーの全ての形、つまり文字によって最大四つの形、からなります.

文字を入力するにつれ、画面上では自動的に変形されます. しかし内部的にはソフトは基本区画の文字の羅列として記憶しますし、保存する際も基本区画の文字が使われます. 先の節で述べた、「形に関係なく、バーを表わす文字は一つだけ」という方式です.

逆に、たとえばウェブページを書いたりする時、表現型を使ってはいけません.

ではなぜ、表現型があるのでしょうか. 以下のような事が規格書に書いてありますが、かなり歯切れが悪いです. この点に関しては、批判もあるのではないかと推察されます.

表現型 B は歴史的理由で存在します. IBM コード等では語頭形としての文字を示すコードが存在しました. そういったものの受け皿としての役割があります. これはもしかすると、アラビア文字タイプライターにさかのぼるかも知れません.

A に関しては、文字としては普通使うことはありません. 一つの目的は、描画エンジンによる使用です. しかし、OpenType 規格のフォントでは、文字の変形を表現型からは取らないようです.

アラビア文字の記号
アラビア「文字」特有の句読点は、ユニコードではコンマ、それにセミコロン、疑問符があるだけで、ピリオドや感嘆符等、形の同じものは欧米と共通ですので、普通に使えます. 他のアラビア「語」特有の記号、例えば年を表わす、数字の下につける記号等については、前述の表を見て下さい.

(2006 年末) ただし、年を表わすサナ記号や、アーヤ末記号他は、描かれ方が特殊ですので、サポートしないソフトもまだ多いです.

タトウィール (カシダ)
ユニコードには、タトウィール U+0640 tatweel تطويل という「文字」が用意されています. カシダ、カシーダ kashida كشيدة と呼ばれる事もあるようです. 他の文字に後続して線をただ伸ばす事が、想定された使い方です. ただの横棒と思って、上下に母音記号を書くこともできそうです.

しかし、タトウィールは安易に使うべきではありません. これが文中にあれば、検索ができません. そもそもは印刷用の要素であり、実際には文字ではありません. また、フォントによって見え方もまちまちな事にも、注意する必要があります. 視覚上の効果を求めるならば、画像を使うべきです.

なぜタトウィールがあるかというと、タイプライターにあった事が起源と推測されます. 西洋語の justification (行末揃え) は空白で調節されますが、アラビア語では横棒を伸ばすのも大事ですから.

kashida という語は、ペルシャ語で「引き伸ばされた」という意味のキャシーデ kashīde がアラビア語化したものだ、と「アラビア系文字の基礎知識」に書いてありました. ペルシャ語では、最後の文字はハー (heh havvez) のようです. アラビア語化すると、やはりター・マルブータでしょうか. 検索すると、一応ひっかかります. Hans Wehr の辞書には載っていないので、組版、活字業界の専門用語でしょう.

切り手、継ぎ手
「切り手」、「継ぎ手」とは筆者の勝手な訳語ですが、これについて説明します. 文字を意図的につなぐか、切るか、という話です.

たとえば Hans Wehr の辞書では、「もの」を示す為に、ハーの語頭形を使いますが、それを示すには、どうすれば良いでしょうか. この為に、ユニコードでは二つの、零幅「接ぎ手」 (Zero width joiner, zwj) U+200d と「切り手」 (Zero width non-joiner, zwnj) U+200c を用意しています. これらを文字の前後に配置すると、それに従い、各文字は前後に手を出したり切ったりします.

ペルシャ語では、アラビア語の「ワ」 و みたいにくっつけて書いて、なおかつ文字を切る語があるそうです. 例: mi-zanad. そのため、零幅切り手がを打つキーが鍵盤上にあります.

接ぎ手と似たもので、「語接ぎ」 (Word joiner, wj) U+2060 があります. これは、文字同士を切りますが、改行を禁じますので、略語に使える、との事です.

継ぎ手がアラビア文字に含まれたのはユニコード 3.2.0 版 (2002 年 3 月)、切り手は 4.0.0 版 (2003 年 4 月) です. これは比較的遅く、その為、他の文字の定義との間に整合性を欠く部分があります. また、サポートしないソフトも多いです.

HTML にこれらを書くには、&amp;#x200c; などと数値表現します.

他
ユニコードの規定として、言語を指定する必要はありません. これは規格書の 5.10 節に書いてあります. ユニコードにおいては日本語と中国語は区別しなければいけない、というのは誤解です. この誤解はよくある、とのことです. 私もこの記事を書くまではそう思っていました.

一方で、ブラウザがフォントを選ぶ都合から、 HTML では言語が指定されているべきです. このためには、タグの中に lang を入れて、 こんにちは. とします. 特に使うタグが無ければ、それ自体では働きの無い span を使い、 أهلا وسهلا  とします.

ヤー、ハムザの問題
これについては独立したページヤー、ハムザの問題を見て下さい.

Windows 1256 (CP 1256, Code page 1256, ms-arab)
少なくともユニコード以前には、最もよく使われたコードです. そして 2006 年現在も、結構使われています. メールをこれで送る人も多いです.

ハムザ上下付きアリフやマッダ、(無)母音記号は含まれます. また、ペルシャ語で使われるアラビア文字、フランス語の文字も含みます.

技術的な文書は:
 * マイクロソフトの仕様のページ

ISO-8859-6 (ISO-IR-127, ISO-8859-6:1987, ECMA-114, ASMO-708, Arabic)
他の ISO-8859 規格と違い、あまり使われなかったようです. OS のメーカー等による、様々な変種があるので注意して下さい.

Wikipedia->ISO/IEC 8859-6 (英語) に、規格があります. また、マイクロソフトに Windows 28596 の仕様のページ があり、しばしば参照されています. 理由は不明ですが、推測するとアラビア語ウィンドウズで使われたのでしょうか. これは今日の ISO-8859-6 に含まれるセット (下位セット) のようです.

前述の Windows 1256 とは互換性はありません.

MacArabic (Macintosh Arabic)
Mac で使われた符号化法で、ISO-8859-6 を拡張したものらしいですが、情報がありません. これもいくつか変種があるようです.

他のマイナーな符号化法

 * ASMO 449 (ISO 9036, Arabic7, Iso-ir-89)
 * IBM420 (CP420, EBCDIC-CP-AR1)
 * IBM864 (CP864)
 * IBM868 (CP868, CP-AR)
 * IBM918 (CP918, EBCDIC-CP-AR2)
 * Isiri-3342 :イランの規格
 * GB18030 :これは中国の規格で、かなり巨大なもののようです. 仮名も含みます.
 * Buckwalter 転写 (transliteration) :これはエンコーディングとは少し違い、アラビア文字をアルファベットで置き換える方法です. アラビア語データベースを作って、一番よく使われる単語は何かな、みたいにコンピュータで自然言語を処理する用途では、「よくある」というのですが、本当でしょうか ? でもこのページへの参照を何回か見た事があります...

アラビア文字タイプライター
がウィキメディア・コモンズにあります.

参考文献、リンク
このページを書く上で、 University of Maryland の Aaron Elkiss 氏によるページ を参考に致しました.

また、Cyber librarian の文字コードのページ は分かり易いまとめです.