文字集合
 
● ASCII/● ISO646

 繰り返しになるが,文字集合(Character Set)は,その名のとおり世界中に存在するさまざまな文字の中から,利用する文字を集めた「使う文字の一覧表」である.

 文字集合は,「面」という考え方を利用して,利用する文字を定義する.面とは,図1のように,縦横に格子状に連なったマス目になっており,この中に,文字を埋めていくわけである.面の縦横サイズは,文字集合によって異なる.また,一つの文字集合は複数の面をもつことができ,それは「第0面〜第N 面」のように数字で表現される.

〔図1〕面と文字集合

 面の中のマス目には,それぞれ数値(コード)が割り振られている.面の中に存在する漢字は,そのコードを使って表現されるのが普通である.

 一つしか面をもたない文字集合は,その面のコードをそのままでコンピュータで扱うこともできる.この場合は,文字集合がそのまま符号化方式となる.たとえば,ASCIIは8×16の128個のマス目の面一つをもつ文字集合だが,そのままASCIIという符号化方式としても利用される.

● ASCII

 ASCIIは,1963年に米国規格協会〔ANSI(American National Standards Institute),当時の名称はASA(American Standards Association)〕によって定められた,文字集合/符号化方式である.ASCIIはAmerican Standard Code for Information Interchange(情報交換のためのアメリカ標準コード)の略で,8×16の面一つをもち,この中では7ビットで表現できる128個(0〜127)の文字/制御コードが定義されている.

 ASCIIができる前,コンピュータには統一された文字コードは存在せず,それぞれのコンピュータで独自のコードが利用されていた.しかし,それではデータの交換ができないため,共通のコード体系が必要となり,ASCIIコードが作られたのである.

 ASCIIコードは,図2のように34個の制御コードと94個の文字で構成されている.ASCIIでは文字の位置を表現するには,「05/12」のように縦横の位置で表現する.制御コードは00/00(NUL:ヌル文字)から02/00(SP:空白)と,07/15(削除)に配置されている.

〔図2〕ASCII文字集合

 ASCIIコードは,現在の主要な多くの文字集合/文字コードの基本として利用されており,アメリカだけでなく世界の標準となっている.利用されている文字コードに関係なく,文字をコードで表すことをアスキーコード,と呼んでしまう場合もある.アスキーコードというのは,実際には特定の文字集合/符号化方式を表す言葉だから,こういった使い方は実際には誤用なわけだが,そのような誤用がされてしまうほど,標準的なコードとして普及しているということなのである.

● ISO646

 ASCIIは,アメリカで作られた,アメリカで利用することを目的とした文字集合である.そのため,通貨単位を表す文字は$しかないし,アルファベットも,英語で利用するものしかなく,ドイツ語で使われている「」「」や,スペイン語の「」など,言語独特のアルファベット記号は表現できない.そこで,1967年に国際標準化機構により,ASCIIを元にしたISO646という規格が策定された.

 ISO646は特定の文字集合を定義するものではなく,ASCIIを拡張し,独自の文字集合を定義するための決まりである.ASCIIだけでは自分たちが必要な文字に足りない,といった場合には,ISO646の決まりを元に,新しい文字を追加して,独自の文字集合を定義することができる.ISO646に基づいて策定された文字集合は,アルファベットや数字などの文字は,共通の位置におかれているため,最小限の互換性を維持できるわけである.

 ISO646では,8×16の面を2枚もつことができる.第1面はASCIIとほぼ同じであるが,その中の12個の記号のコードに関しては,独自の文字に変更してもよいことになっている.変更してはいけない共通の文字をBCT(Basic Code Table)と呼ぶ.

 そして第2面は,すべて自由に定義できる領域である.ただし,定義できるのは第1面で文字が定義されているのと同じ位置の94個だけである.第1面で制御コードとされている34個の位置には,第2面でも文字を定義することはできない.

〔図3〕ISO646で変更可能な文字

 これらをまとめると,ISO646では図3のような位置に新しい文字を定義できることになる.この仕様を利用して,さまざまな文字集合が策定されている.たとえば,イギリスで利用されるBS 4730では「#」の代わりに「£」が含められている.ドイツで利用されるDIN 66 003では,ウムラウト付きのアルファベットなどを含む文字に置き換えられている(図4).日本でも「JIS X 0201」というISO646に準拠した文字集合が定められている.

〔図4〕ドイツ語の文字集合 DIN 66 003

 ただし,コンピュータなどではこれら置き換え可能とされる記号が,特別な意味をもつ場合も多い.たとえば「@」などはメールアドレスでユーザー名とドメイン名を区切る記号になっている.そういった記号が置き換えられてしまうと,その文字集合を利用しているコンピュータでは,表示のされ方が変化してしまうため,あまり都合が良くない.そのため,ヨーロッパでは,ISO8859というASCIIとの互換性を重視した文字コード(コラム2参照)のほうが一般的になっている.

 JIS X 0201においても,バックスラッシュ「\」を円マーク「¥」に置き換えているが,MS-DOSやWindowsではディレクトリの区切りをバックスラッシュで表現するため,日本語版のWindowsでは「C:¥WINNT¥java¥」のようにディレクトリの区切りがすべて「¥」になってしまう.

コラム1

制御コード

 ASCIIで定められている制御コードは表Aの34種類である.しかし,文字集合ではこれらの制御コードの意味は規定しているが,それをコンピュータがどう処理するかについてはとくに規定がない.したがって,これらの制御コードの扱いはOSや,アプリケーションによって異なってくる.

〔表A〕ASCIIで定義されている制御コード
00 NUL Null character 12 DC2 Device Control 2
01 SOH Start of Header 13 DC3 XOFF Device Control 3
02 STX Start of Text
03 ETX End of Text 14 DC4 Device Control 4
04 EOT End of Transmission 15 NAK Negative Acknowledgement
05 ENQ Enquiry
06 ACK Acknowledgment 16 SYN Synchronous Idle
07 BEL Bell 17 ETB End of Trans. Block
08 BS Backspace 18 CAN Cancel
09 HT Horizontal Tab 19 EM End of Medium
0A LF Line Feed 1A SUB Substitute
0B VT Vertical Tab 1B ESC Escape
0C FF Form Feed 1C FS File Separator
0D CR Carriage Return 1D GS Group Separator
0E SO Shift Out 1E RS Record Separator
0F SI Shift In 1F US Unit Separator
10 DLE Data Link Escape 20 SPC Space
11 DC1 XON Device Control 1 7F DEL Delete

 たとえば,いちばんわかりやすいのは,改行コードの問題だ.改行コードは,WindowsではCR(0Dh)+LF(0Ah)で表現する.ところが,UNIX系ではLFだけ,MacOSではCRだけである.制御コードの多くは,タイプライタ時代の文化を色濃く残したものになっており,CR(Carriage Return)は,行の終わりまで打ち終わった際に印字位置を行頭に戻す,という意味をもつ(キャリッジというのはその作業に使うバーの名前).そしてLF(Line Feed)は1行打ち終わったときに,紙を1行分送り,次の行が打てるようにする作業をいう.タイプライタで改行を行うためには,CRとLFの両方の作業を行う必要があり,それを考えるとWindowsの改行コードがいちばん意味的に正しいのだが,制御コードの扱い自体は文字集合では決められていないので,UNIXやMacOSのやり方でも間違っているわけではない.

 ちなみに制御コードの中で,なぜ削除を表すコードだけが離れてしまっているのかというと,これは以前,データを記録するのに紙テープを利用していたという歴史的な事実に起因している.筆者は記録に紙テープを利用していた時代を知っているわけではない.読者の皆さんにもそういう方は多いと思うが,昔の映画などで,たくさんの穴のあけられた紙テープがコンピュータから出力されているといった映像は見たことがあるのではないだろうか.紙テープにデータを記録する場合,穴があいていれば1,あいていなければ0,というようにデータの各ビットを紙に穴があいているか否かで表現する.一度穴をあけてしまうと,その穴をふさぐことはできない.そこで,既に出力してしまったデータを削除する場合は,すべての場所に穴をあけた状態,つまりすべてのビットを1にした状態にすることで対応した.ASCIIコードは7ビットで表すから,そのすべてのビットを1にした状態,つまり127が削除の記号に割り当てられ,それが現在まで残っているのである.

コラム2

ISO8859

 ISO8859はヨーロッパの言語のための文字集合/符号化方式の規格で,日本語は利用できないが,世界では非常に一般的でよく利用されるものなので,ここで紹介しておくことにする.

 ISO8859は8ビットのコードで,ISO8859-1からISO8859-16の15種類(ISO8859-12は存在しない)が定義されており,それぞれにサポートする言語が異なる(表B).これらのコードは00h〜7FhまではASCIIとまったく同じである.そして,それ以降(A0h〜FFh)には,それぞれ様々な文字が割り当てられている.したがって,どの文字コードであっても,英語(ASCIIのみ)の文章は化けることなく表示できる.

〔表B〕ISO8859で定義されている文字コード
文字集合名 別 名 対応する言語
ISO 8859-1 Latin-1 西ヨーロッパの言語
ISO 8859-2 Latin-2 中央,東ヨーロッパの言語
ISO 8859-3 Latin-3 南ヨーロッパの言語
ISO 8859-4 Latin-4 北欧の言語
ISO 8859-5 キリル文字
ISO 8859-6 アラビア文字
ISO 8859-7 ギリシャ文字
ISO 8859-8 ヘブライ語
ISO 8859-9 Latin-5 Latin-1にトルコ語を追加
ISO 8859-10 Latin-6 北欧の言語
ISO 8859-11 タイ語
ISO 8859-13 Latin-7 バルト諸国の言語
ISO 8859-14 Latin-8 ケルト語
ISO 8859-15 Latin-9 西ヨーロッパの言語.Latin-1にユーロ記号などを追加
ISO 8859-16 Latin-10 中央,東ヨーロッパの言語

 中でも,もっともよく利用されるのが,ISO8859-1である.これは,別名Latin-1と呼ばれる文字コードで,図Aのような文字が含まれている.このコードはもともとIBMのPCで利用されていた内部コードで,現在では,さまざまなところで標準のコードとして利用されているものである.欧米で決められたデータ形式の仕様の場合,利用可能な文字コードはISO8859-1とUnicode,といったように,ISO8859-1で表現できる場合はISO8859-1で,それ以外はUnicodeで表現するように定められているものも多い.

〔図A〕ISO8859-1(Latin-1)


インデックス
 ◆コンピュータと文字の関係
 ◆文字集合と符号化方式
 ◆文字集合
NEW● ASCII/● ISO646
NEW● JIS X 0201/● JIS X 0208

今月号特集トップページへ戻る


Copyright 2002 水野貴明