本文へ

CyberLibrarian

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

ASCIIとユニコード

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

ASCII

【2008-02-17更新】

コンピュータは、文字ひとつひとつに与えてあるコード番号(英数字、記号の組み合わせ)で文字を認識するのですが、英語圏では、使用される文字数は、アルファベットと数字、それに記号とで合計100種類程度です。これに空白(スペース)や改行、タブ(数桁ぶんの空白を意味する記号)、コンピュータを制御するための制御記号などを加えても、合計で128種類(7ビット)で、すべての文字を表現することができます。
ASCII(アスキー;American Standard Code for Information Interchange)は、アメリカのJISに相当する団体である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)と呼ばれます。

ページのトップへ

ユニコード

【2008-02-17更新】

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

ユニコードとUCS

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

ユニフィケーション

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

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

UTF

ユニコードは内部コードとして開発され、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)もあり、主に電子メールでの文字コード変換に用いられています。

文字コード

当ホームページの別ページでは、ユニコードの表と、数値文字参照による記述方法について紹介しています。
また、ユニコード・コンソーシアムのホームページでは、PDF形式のコード表外部へのリンクJavaScript Unicode Charts外部へのリンクというコード検索システム、Unihan Database外部へのリンクというCJK統合漢字のデータベースなどを提供しています。

ポイント
エディタの中には、そのファイルがUTF-8かどうかを識別するなどの目的で、保存時にBOM(ボム;Byte Order Mark)と呼ばれる特殊な符号をファイルの先頭に付与するものがあります。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-