本文へ

CyberLibrarian

図書館員のコンピュータ基礎講座

ASCIIとUnicode

ここでは、日本の文字コードとASCII、Unicodeをご紹介します。

ASCII

【2008-02-17更新】

コンピュータは、文字ひとつひとつに与えてあるコード番号(英数字、記号の組み合わせ)で文字を認識するのですが、英語圏では、使用される文字数は、アルファベットと数字、それに記号とで合計100種類程度です。これに空白(スペース)や改行、タブ(数桁ぶんの空白を意味する記号)、コンピュータを制御するための制御記号などを加えても、合計で128種類(7ビット)で、すべての文字を表現することができます。
ASCII(アスキー;American Standard Code for Information Interchange)は、アメリカの標準化組織であるANSIが1963年に制定した文字コードです。ASCIIは世界中に広まり、ASCIIをもとにして1967年にISO R 646という国際的な推奨規格が制定され、これをもとに各国が自国の標準文字コードをつくりました。このISO R 646には、文字コードを6ビットで表わす案と7ビットで表わす案が併記されていましたが、1973年に7ビットに一本化されてISO 646という正式規格になりました。このISO 646には、BCT(Basic Code Table)とIRV(International Reference Version)の2種類のコード表が含まれています。BCTは全世界共通の文字からなり、12文字からなるIRVにはナショナル・ユース・ポジションとして各国独自の文字を割り当てることができるようになっており、各国の通貨記号や、フランスではアクサンなどが、ドイツではウムラウトなどが割り当てられました。ISO 646は1991年にさらに改正されています。世界中には様々な文字コードが存在しますが、英数字部分はほとんどがこのASCIIコードを基に作られており、ASCIIはコンピュータ用の標準コードとして最も普及しています。他の文字コードの多くは8ビットを情報単位として使用しており、ASCIIを8ビット環境で使用する必要がある場合には、最上位桁に0を加えます(0+7ビット)。
詳細は、ASCIIコード表をご覧ください。

ポイント
IBMは、ASCIIとは互換性が無いEBCDIC(エビシディック;Extended Binary Coded Decimal Interchange Code)と呼ばれる文字コードを1964年に発表しました。現在でも一部の汎用機等で使用されています。当初は58文字が定義されていましたが、英小文字、半角カナ、記号などを未定義部分に追加した数多くの拡張が存在しています。日立製作所がカナを追加した仕様は一般にEBCDIK(エビシディック;Extended Binary Coded Decimal Interchange Kana Code)と呼ばれます。

ページのトップへ

Unicode

【2013-10-07更新】

世界中には数多くの各国独自の文字コードが存在していますが、これらの文字コードを同時に1つのコンピュータで扱うことは基本的にできませんでした。そこで、世界中の言語の文字を1つのコード体系に納めた文字コードを作ろうという動きが1980年代から出てきました。

UnicodeとUCS

アップルコンピュータ社やマイクロソフト社、IBMなどのコンピュータメーカーが参加するユニコード・コンソーシアム外部へのリンクは、2バイト(16ビット)で世界中の文字を表現するUnicode(ユニコード)という世界統一文字コードを策定していました。一方、ISOは、4バイト(32ビット)の文字コードを開発していました。そして、同じ目的の文字コードが複数できることを避けるため、1993年にUCS(ユーシーエス;Universal Multiple-Octet Coded Character Set = 国際符号化文字集合)(ISO/IEC 10646)が、その一部としてUnicodeを取り入れる形で制定されました。日本では、1995年にJIS X 0221としてJIS規格に採用されました。UCS制定後も、UnicodeとISOの規格は、ユニコード・コンソーシアムとISOという別の団体で互いに調整を図りながら策定されています。

UCS-2とUCS-4

UCSには、UCS-4(ユーシーエスフォー;Universal multi-octet Character Set 4)と、UCS-2(ユーシーエスツー;Universal multi-octet Character Set 2)があります。
UCS-4は、1文字を4バイト(31ビット)で表現し、最大2,147,438,648文字を扱うことができます。各バイトを、上位から群 (group)、面 (plane)、区 (row)、点 (cell) と呼び、UCS-4の最初の面(第0群第0面)をBMP(ビーエムピー;Basic Multilingual Plane = 基本多言語面)と呼びます。そして、このBMPを2バイト(16ビット)で表現したものがUCS-2です。UCS-2は、最大65,536文字を扱うことができ、Unicodeとほぼ同じです。

ユニフィケーション

Unicodeは、最大65,356文字を扱うことができる2バイト(16ビット)で世界中の文字を表現しようとしたため、字源的には同じだけれども字形の異なる、中国語、日本語、韓国語の漢字に同じコードを与えるハンユニフィケーション(Han Unification)と呼ばれる方式をとりました。この方式によって統合された漢字をCJK統合漢字(シージェーケイトウゴウカンジ、CJKはChina、Japan、Koreaの頭文字)と呼びます。CJK統合漢字にはベトナムで使用されていた漢字も含まれているため、CJKV統合漢字(シージェーケイヴイトウゴウカンジ)と呼ばれる事もあります。

「与」(4E0E)と「骨」(9AA8)の日中の字形
日本 日本の「与」の字形 日本の「骨」の字形
中国 中国の「与」の字形 中国の「骨」の字形

UTF

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
          ≡ 304B3099 ◌゙

また、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
  • CJK互換漢字 と CJK統合漢字
    FA18 793C

さらに、合成・分解の関係には、互換等価(Compatibility Equevalence)もあり、Unicodeの規格書の表では「≈」(同相記号)で表わされます。例えば、「Unicodeの半角・全角形(FF00~FFEF)外部へのリンク」(PDFファイル)のU+FF21の部分には、次のように記述されています。

FF21  A  FULLWIDTH LATIN CAPITAL LETTER A
          ≈<wide> 0041 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で保存します。

参照・参考文献
  • 図解雑学文字コード / 加藤弘一著 ナツメ社, 2002.8 [b]
ページのトップへ
前ページへ / 次ページへ
CyberLibrarian : tips on computer for librarians, 1998-