ASCIIとUnicodeここでは、日本の文字コードとASCII、Unicodeをご紹介します。
|
「与」(4E0E)と「骨」(9AA8)の日中の字形 | ||
日本 | ||
中国 |
Unicodeは内部コードとして開発され、ISO 2022の形式とは異なります。そのため、インターネットのようなコンピュータ間の情報交換に用いる場合などには、UTF(ユーティーエフ;UCS Transformation Format)と呼ばれるエンコード法によって変換します。
UTFにはいくつかの方式がありますが、最も一般的なのはUTF-8(ユーティーエフハチ、ユーティーエフエイト;8-bit UCS Transformation Format)で、RFC 2279で定義されています。UTF-8は、ASCIIコードに当たる部分はASCIIコードと同じコードで1バイトで表し、それ以外の文字を2~6バイトの可変長で表します。
しかし、UTF-8ではUCS-2の範囲の文字しか扱えません。そこで、UCS-2の範囲は2バイト、UCS-4の範囲は4バイトでエンコードするサロゲート・ペア(Surrogate Pair)と呼ばれる方法が考え出されました。このエンコード法をUTF-16(ユーティーエフジュウロク;16-bit UCS Transformation Format)と呼び、RFC 2781で定義されています。
さらに、7ビットのASCIIコードにエンコードするUTF-7(ユーティーエフナナ;7-bit UCS Transformation Format)もあり、主に電子メールでの文字コード変換に用いられています。
Unicodeでは、「が」という文字をU+304C(濁点付き平仮名か)という1つの文字コードで表わすことができますが、同時に、U+304B(平仮名か)とU+3099(濁点)を合成して表わすこともできます。このU+304C(が)をU+304B(か)とU+3099(◌゙)に分けることを分解(Decomposition)、その逆を合成(Composition)と呼びます。
合成・分解の関係は、Unicodeの規格書などで示されています。互いに完全に等価とみなしてよい関係を正規等価(Canonical Equevalence)といい、Unicodeの規格書では「≡」(合同記号)で表わされます。例えば、「Unicodeの平仮名(3040~309F)」(PDFファイル)のU+304Cの部分には、次のように記述されています。
304C が HIRAGANA LETTER GA ≡ 304B か 3099 ◌゙ |
また、Unicode文字の様々な属性を列挙している「UnicodeData.txt」(英文解説
)のU+304Cの部分には、次のように記述されています。
304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; |
なお、文字を合成するためには、合成対象の文字コードを列記します。例えば、文字参照で「が」と記述すれば、「が」と表示されます。
上例を含め、正規等価の代表的な例としては、次のようなものがあります。
一対多の関係(1つの文字コードに対して複数の文字コード)のみではなく、CJK互換漢字とCJK統合漢字の例のように、一対一の関係もあることに注意してください。
が | ≡ | か | ◌゙ |
304C | 304B | 3099 |
ü | ≡ | u | ◌̈ |
00FC | 0075 | 0308 |
가 | ≡ | ᄀ | ᅡ |
AC00 | 1100 | 1161 |
礼 | ≡ | 礼 |
FA18 | 793C |
さらに、合成・分解の関係には、互換等価(Compatibility Equevalence)もあり、Unicodeの規格書の表では「≈」(同相記号)で表わされます。例えば、「Unicodeの半角・全角形(FF00~FFEF)」(PDFファイル)のU+FF21の部分には、次のように記述されています。
FF21 A FULLWIDTH LATIN CAPITAL LETTER A ≈<wide> 0041 A |
互換等価の代表的な例としては、次のようなものがあります。
A | ≈<narrow> | A |
FF21 | 0041 |
① | ≈<circl> | 1 |
2460 | 0031 |
Ⅲ | ≈ | I | I | I |
2162 | 0049 | 0049 | 0049 |
互換等価は、互いにほぼ同じであるけれども、完全には等価ではない関係です。同じ文字として扱ってよいか否かを個別に判断する必要があります。例えば、検索処理では通常、英数字の半角形と全角形を同じ文字として扱いますが、U+0049 U+0049 U+0049(3つの大文字Iの羅列)をU+2162(ローマ数字の3)と同じ文字として扱うと問題が生じる可能性があります。
当サイトでは、Unicodeの表と、数値文字参照による記述方法について紹介しています。
ユニコード・コンソーシアムのホームページでは、次のような表やデータベースが提供されています。
ポイント
エディタの中には、そのファイルがUTF-8かどうかを識別するなどの目的で、保存時にBOM(ボム;Byte Order Mark)と呼ばれる特殊な符号(U+FEFF)をファイルの先頭に付与することがあります。BOM付きのものをUTF-8、BOMがないものをUTF-8N(ユーティーエフハチエヌ、ユーティーエフエイトエヌ;8-bit UCS Transformation Format Normal)と言い分けることがあります。しかし、UTF-8Nというエンコード法がある分けではなく、区別が必要ない場合はUTF-8というエンコード法はUTF-8Nを意味します。UTF-8Nを正しく認識できないソフトウェア用にファイルを作成する場合を除き、UTF-8とUTF-8Nの2つの保存形式が選択できる場合は通常、UTF-8Nで保存します。