ASCIIなどの英数文字や日本語を始め、支那語・台湾語・朝鮮語などの漢字文字、梵字やキリル文字等も含め、全ての国語文字のコード化を目標とする文字コード仕様のこと。
Unicodeは米国の「Unicodeコンソーシアム」という団体により策定されている。
このUnicodeコンソーシアムとISOは直接無関係だが、しかしISOと連携を取り合って規格が作られている。こうして作られたISO/IEC 10646が公的規格となっている。
Unicodeコンソーシアムは、Unicodeについて、次を標榜している。
バージョンごとの差異については後述する。
Unicode 5.1.0までで、利用可能な文字の種類は次のとおりである(文字番号順)。
対応する言語類のみ表記。詳細は基本多言語面(BMP=Basic Multilingual Plane)の項目を参照のこと。
補助多言語面(SMP=Supplementary Multilingual Plane)。
古代文字や記号類など、日常滅多に使わないような文字がここに格納されている。
補助漢字面(SIP=Supplementary Ideograph Plane)。
CJK Ideograph Extension Bがここにあり、00面と合わせて康煕字典の全ての字が揃う。
補助特殊用途面(SSP=Supplementary Special-purpose Plane)。
外字領域。
元々は、ISO/IEC 10646-1によって定められる31ビット固定長文字コード規格のUCS-4で、00群00面(上位16ビットがすべて0となる領域)のことを意味していた。これは基本多言語面(BMP)と呼ばれ、これを16ビットで表現したものをUCS-2と呼ぶ。最大で65,536文字が表現可能だった。
多国語が必要な環境で歓迎され、HTMLなどの文書やWindows NTなどのOSで採用されたが、16ビット固定長では文字数の制限もあり世界中の文字を収録することは到底不可能なことだった。
そこでUnicode 2.0からサロゲートペアと呼ばれる方式で、必要に応じて2バイト(1バイトは16ビット)で1文字を表現することで文字を大幅に増やす方式(UTF-16)を採用した。これにより、扱える文字数が合計で220+216-2048(サロゲート)で、最大1,112,064字となった。この版では枠組みが決まっただけで、その領域に格納する文字までは決められていない。
また「連結可能文字」というものも作られ、例えば、がをかと連結用の゛で表現するようなことも可能となった。もちろん、単に表現可能ということだけであって、それを処理できる処理系があるかどうかは、Unicodeの規格としては関与するところではない別の問題である。
Unicode 2.0の登場により、16ビット固定長という概念は完全に崩壊したといえる(元々無理だったのだが)。
世界中の大多数には無関係のことだが、U+3400〜4DFFに置かれていたハングルがU+AC00〜D7FFに移動され増やされた。ハングルに関してのみ、Unicode 1.1迄とUnicode 2.0以降は非互換となる。
Unicode 3.0になり、ようやく不足極まっていた漢字文字が増やされることになった。
Unicode 1.1ではハングルが置かれていたBMP領域(U+3400〜U+4DFF)をCJK統合漢字 拡張-A(CJK Ideograph Extension A; Ext-A)とし、6,582文字の漢字が増やされている。
Unicode 3.1からは、更に漢字を増やすため遂にBMPを超える範囲の文字も規定された。サロゲート領域(U+20100〜U+2A6D6)にCJK統合漢字 拡張-B(CJK Ideograph Extension B; Ext-B)として42,711文字が追加されている。
また、U+E00nnというコード領域に現在の言語を表わすための言語タグと呼ばれる言語指定コードなどが追加されている。
これは例えば「骨」のように日台支鮮で字形が異なる文字を、文字のコードポイントはそのままに言語で識別しようというものである。
またU+E007Fというコードを入れると、それ以降の言語タグは一切無視されるという仕様もある。
仕様として公式にJIS X 0213への対応が明記された。
異体字セレクタ(Variation Selector)1〜16が追加された。これは従来、異体字タグとも呼ばれていたものである。詳細は後述する。
異体字セレクタ(Variation Selector)が17〜256まで追加された。
第3面の全域がreserved(予約)として、記述が追加された。
異体字セレクタはUnicode 3.1頃から検討されていた包摂文字コードの切り替え機能である。
全部で256種用意され、1〜16はU+FE00〜U+FE0F、17〜256はU+E0100〜U+E01EFに割り当てられている。
コプト語や古ペルシャ語など、対応言語の追加。
BMP内にNKo、バリ文字、ラテン文字拡張CおよびDが追加され、サロゲート領域にフェニキア文字、楔形文字、Counting Rod 数字が追加された。
BMP内にスンダ文字、レプチャ文字、オルチキ文字、ヴァイ文字、サウラーシュトラ文字、ルジャン文字、チャム文字と、拡張キリル文字が追加された。
SMP内にAncient Symbols、ファイストス文字(円盤文字)、リキア文字、カリア文字、リディア文字、麻雀牌、ドミノ牌が追加された。
Unicodeは16ビット固定長を前提として誕生し発展したため、大きくBMPとそれ以外に分けられている。
BMPは当初、次の4領域に分けられていた。
しかしこの枠組みについては後の拡張によって崩壊しており、現在においては名残りとして残るのみである。
Unicodeでは、文字コードの0x10000ごとの区切りとして面(プレイン=Plane)と呼ぶ。現在は各面について名称が与えられている。
Unicodeでは、16進数で書かれる文字番号は、頭に「U+」をつけるルールとなっている。
元々16ビットで設計されていたため、漢字についてはCJK統合漢字として全体に占める割り合いを減らす努力がされたが、記号類はそれと逆に、細分化されている点が特徴といえる。
例えば、ASCIIではマイナス記号もハイフンも、-という記号一つで共用する。しかしUnicodeでは、マイナスはU+2212「−」、ハイフンはU+2010「‐」として別の番号が与えられている。その他の記号についても同様で、記号類が豊富な点は特筆に値する点である。
Unicodeの記号類の豊富さを語る上で、例として横棒関係が挙げられることが多い。
Unicodeでは、横棒関係だけでも、軽く次のようなものがある。罫線用の横線は除く。また欧文、日本語以外の言語の特殊な横棒記号も抜けているものがあるかもしれない。
| 番号 | 名称 | 概要 |
|---|---|---|
| U+002D | HYPHEN-MINUS | ASCIIのマイナス記号 |
| U+00AD | SOFT HYPHEN | 単語中、折り返す時に表示されるハイフン(折り返さない時は非表示) |
| U+2010 | HYPHEN | 一般的なハイフン |
| U+2011 | NON-BREAKING HYPHEN | 右端でも折り返さないハイフン |
| U+2012 | FIGURE DASH | 数字用のダッシュ |
| U+2013 | EN DASH | n幅のダッシュ |
| U+2014 | EM DASH | m幅のダッシュ |
| U+2015 | HORIZONTAL BAR | 横棒 |
| U+2043 | HYPHEN BULLET | 中黒のようなハイフン |
| U+207B | SUPERSCRIPT MINUS | 上付きマイナス |
| U+208B | SUBSCRIPT MINUS | 下付きマイナス |
| U+2212 | MINUS SIGN | マイナス |
| U+301C | WAVE DASH | 波ダッシュ (〜) |
| U+3030 | WAVY DASH | 波線 |
| U+30FC | KATAKANA-HIRAGANA PROLONGED SOUND MARK | 仮名の長音 |
| U+FF0D | FULLWIDTH HYPHEN-MINUS | 「全角」のASCIIマイナス記号 |
| U+FF5E | FULLWIDTH TILDE | 全角チルダ |
| U+FF70 | HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK | 半角の仮名の長音 |
ちなみに、JIS X 0208の~は、本来はU+301Cに割り当てられるのが正しいと考えられるが、Windows等ではU+FF5Eに割り当てている。
しかし、本来U+FF5Eは「チルダ」であって、波線記号ではない。日本語以外の言語では、U+FF5Eを表示させても一般的な波線にはならない。
従って、「キャ~~!!」といった~の使い方は、これだと間違いになるだろう。
空白も非常に多い。これだけ用意して、どう使い分けるのかは甚だ疑問である。
| 番号 | 名称 | 概要 |
|---|---|---|
| U+0020 | SPACE | ASCIIの空白記号 |
| U+00A0 | NO-BREAK SPACE | 改行しない空白 |
| U+2000 | EN QUAD | n幅の四角形 |
| U+2001 | EM QUAD | m幅の四角形 |
| U+2002 | EN SPACE | n幅の空白 |
| U+2003 | EM SPACE | m幅の空白 |
| U+2004 | THREE-PER-EM SPACE | 1/3m幅の空白 |
| U+2005 | FOUR-PER-EM SPACE | 1/4m幅の空白 |
| U+2006 | SIX-PER-EM SPACE | 1/6m幅の空白 |
| U+2007 | FIGURE SPACE | 数字用空白 |
| U+2008 | PUNCTUATION SPACE | 句読点用空白 |
| U+2009 | THIN SPACE | 細い空白 |
| U+200A | HAIR SPACE | 非常に細い空白 |
| U+200B | ZERO WIDTH SPACE | 幅の無い空白 |
| U+202F | NARROW NO-BREAK SPACE | 幅の狭い改行しない空白 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 中程度の幅の数学用空白 |
| U+3000 | IDEOGRAPHIC SPACE | 全角空白 |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | 幅の無い改行しない空白 |
この他、空白ではないが、U+200C(ZERO WIDTH NON-JOINER)、U+200D(ZERO WIDTH JOINER)といった、特定の言語向けの空白類似記号がある。