基礎知識-目次
文字コード基礎知識
1.文字コードとフォント
フォントとは、活字やコンピューターにおいて扱われる文字のうち、統一された書体や大きさの文字のセットのことです。
フォント形式には、ビットマップフォント[1]、アウトラインフォント[2]があります。
文字セットつまり文字集合には様々な文字が収録されており、これらの個々の文字に固有の符号や文字コードを決めて使用します。
- [1] ビットマップフォント
- 文字をドット(点)の集合によって表現する方式。
- [2] アウトラインフォント
- 文字の輪郭(アウトライン)を座標、関数として記録し計算によって描画する方式、文字の拡大・縮小による字形の崩れを解消している。
アウトラインフォントの代表的な形式 PostScript Adobe Systemsが開発したアウトラインフォントの仕様です。
3次ベジェ曲線で文字を表現します。TrueType Apple,Microsoftが開発したアウトラインフォントの仕様です。
2次ベジェ曲線で文字を表現します。
TrueType仕様としてはVer.1.66まで公表されており、その後OpenTypeに含まれる形で仕様が追加されています。OpenType Adobe Systems,Microsoftの共同設計で、Appleが賛同する形で発表された仕様です。
文字を表現する際にPostScript形式、TrueType形式のいずれかでデータが埋め込まれるフォントです。
TrueType形式でサロゲートペア、IVSに対応しているケースは、実際にはOpenType仕様に基づいています。
2.文字コードとは? (符号化文字集合と符号化方式の違い)
文字集合の定義として符号化文字集合[3]があります、具体的にはJISやUnicodeなどの規格です。これに対して実装上の文字コードは、文字符号化方式[4]でShift_JIS,EUC-JP,UTF-8,UTF-16などを指します。
- [3] 符号化文字集合(CCS:Coded Character Set)
- どのようなグリフが含まれているか(文字の集合)を規定します。
符号化された(Coded)文字(Character)の集まりであり、個々の文字に固有の符号を割り当て、識別可能にした文字集合を指します。管理上の識別符号はありますが、文字コードを定めているわけではありません。- JIS X0213:2004に収録されている「亜」の管理上の識別符号
- 面・区・点: 1面、16区、1点
- Unicode: U+4E9C
- 「面・区・点」、Unicodeは「符号」であり文字コードではありません。
- [3-1] JIS規格の文字集合の管理
- JISでは主な文字集合としてJIS X0208、JIS X0213を定めています。
これらはそれぞれの改定年により、JIS X0208は通称JIS78、JIS83、JIS90。JIS X0213では通称JIS2000、JIS2004があります。
Windows XPではJIS90対応、Windows Vista以降はJIS2004対応のMS明朝・ゴシックフォントが搭載されています。 - JIS X0208では文字集合を94の「区」と94の「点」の組み合わせ(計8,836字)として管理しています。そのため、この管理上の識別符号は「区点コード」と呼ばれます。
JIS X0213では非漢字を含め文字数が10,000字を超えるため、「区点」の組み合わせをひとつの「面」とし、「面・区・点」で文字を管理しています。
- [4] 文字符号化方式(CES:character encoding scheme)
- 文字集合の個々の文字を(コード)として表現する方法を指します。一般に一つの文字集合に対して、用途に応じて(メール、Webなど)複数の符号化方式があります。
-
符号化文字集合 文字符号化方式 JIS X 0208 Shift_JIS,EUC-JP,ISO-2022-JP Unicode UTF-8,UTF-16,UTF-32
3.Unicodeについて
Apple社、IBM社、Microsoft社など米国の情報関連企業の集まりからなるユニコードコンソーシアム(The Unicode Consortium)という非営利団体が定める私的な文字規格です。現在では、国際符号化文字集合 (ISO/IEC 10646)の一部として標準化されています。
Unicodeは様々な言語に対応し、国を超えた相互運用性、相互接続性の実現のための文字集合です。
Unicodeの管理上の識別符号は「Unicodeスカラー値」といい、「U+」を付けて16進数で表現します。
Unicodeでは識別符号が示す文字が、意味や成り立ちから区別されておらず、字形としてほぼ一致するものをまとめています。これを包摂とよびます。そのため、漢字圏では特に字形の揺らぎがあります。
Unicode1.0では1文字あたり2バイトのデータ量(0x0000~0xFFFF)を使い65536通りの文字で世界中の文字を表現しようとしました。
ところが、近年Unicodeに組み込みたい文字の要望が増えたためこれだけでは収まらず、Unicode2.0で2バイトのデータを2つ組み合わせて表示する「サロゲートペア」という拡張技術が導入され、より多くの文字の表現を可能としています。
更に、Unicode4.0で字形一致する異体字を表現する仕組みとして「IVS」が追加されました。
文字を表現するための技術仕様の追加に伴い、Unicodeは現在もバージョンを上げつつ収録文字を増やしています。
- サロゲートペア
-
U+D800~U+DBFF(1024通り)を「上位サロゲート」、U+DC00~U+DFFF(1,024通り)を「下位サロゲート」と規定し、「上位サロゲート+下位サロゲート」の4バイトで文字を表現する方法です。これは、「1文字=2バイト」の基本は維持しつつ、一部の文字については「1文字=4バイト」にする方法です。
「上位サロゲート」も「下位サロゲート」も従来のUnicodeでは未使用の領域なので、以前のUnicodeの文字コードと重複することはありません。
このサロゲートペアの導入により1,024×1,024=1,048,576字の領域が拡張(追加)されることになりました。
1,048,576 / (64 × 1024 = 65,536) = 16 で、全部で第16面までの文字を収録することができます。これによりUnicodeスカラー値の上限がU+10FFFFまでと定められています。
既存の0x0000~0xFFFFで示す範囲は「0面」となり基本多言語面(BMP:Basic Multilingual Plane)と呼びます。追加面である1面~16面には面毎に用途が定められており、文字追加が行われています。 - 符号化方式(UTF:Unicode Transformation Format)
- Unicodeの符号化方式としてビット単位別に、UTF-8[5]、UTF-16[6-1]、UTF-32[7]があります。
-
- [5] UTF-8
- 可変長(1~4バイト)の8ビット符号単位で表現する文字コード。ascii文字はそのまま1バイトで使用できます。また、サロゲートペアのような符号単位の組み合わせを使用せず、8ビット長でUnicode文字を表現できます。
- [6-1] UTF-16
- 基本多言語面を16ビット、その他の文字をサロゲートペアの符号単位二つ(=32ビット)で表現する文字コードです。
- バイトオーダーの概念があり、通常ファイルの先頭にバイト順マーク (BOM:Byte Order Mark) が付与されます。BOMとは、通信やファイルの読み書き等、8ビット単位の処理でバイト順を識別するための印であり、データストリームの先頭に付与されます。
値はU+FEFF。システムが読み込んだ先頭2バイトが0xFF,0xFEならリトルエンディアン、0xFE,0xFFならビッグエンディアンとして後に続く文書を処理します。 - [6-2] UTF-16BE
- UTF-16をビッグエンディアンでBOMを使用せずに収容します。
- [6-3] UTF-16LE
- UTF-16をリトルエンディアンでBOMを使用せずに収容します。
- [7] UTF-32
- 単一長の符号単位として32ビットで表現する文字コードです。Unicodeの符号空間がU+10FFFFまでであるため実際に使われるのは21ビットまでです。
- 標準化
- ISO/IEC 10646では、Unicodeに対応する文字はUCS(Universal Coded-Character Set)といいます。
UCSのサブセットとして16ビットで表現できる0xFFFFまでの文字を定義するUCS-2と、0x10FFFFまで利用範囲として定義可能なUCS-4があります。
Unicodeがサロゲートに対応していることから、UCS-2は廃止予定とされています。
主な符号化では、UTF-8:UCS Transformation Format 8、UTF-16:UCS Transformation Format 16とUnicodeのUTFと省略名が対応する形で定義されています。
IVS(Ideographic Variation Sequence)
1.IVS(Ideographic Variation Sequence)とは?
今までのUnicodeでは包摂により区別されなかった異体字を表示するための仕組みです。
異体字を表現したい文字(基底文字)と異体字や俗字などをバリエーション番号(字形選択子(VS:Variation Selector))を組み合わせて、漢字字形指示列 (IVS:Ideographic Variation Sequence)を構成し、異体字のうちのどれであるかを特定をします。
例えば、「㐂」(U+3402)の異体字を指定するには、
- Windows7のメモ帳で、IVSに対応している書体を選択します。
- 「㐂」を入力します。
- その後ろにU+E0101またはU+E0102を入力します。
- 「㐂」の字形が変化します。
(例)「㐂」(U+3402)の異体字 Windows7 メモ帳での表示(小塚ゴシック Pr6N) | |
---|---|
U+3402 U+E0101(カタカナのヒが三つのような字形) | U+3402 U+E0102(上が「七」、下が「土へん」+「七」のような字形) |
- 字形選択子(VS:Variation Selector)
- 異体字を区別して識別するために使用されるコードです。「異体字セレクター」とも呼ばれます。
- 基本となる文字に対し、異体字や俗字などをバリエーション番号と組み合わせて表現するための仕組みです。漢字以外の字形選択子もあり、Unicode 3.2から正式に追加されました。
次の256文字あります。 -
- U+FE00~FE0F ‐ VARIATION SELECTOR-1~16
- U+E0100~E01EF ‐ VARIATION SELECTOR-17~256----漢字の字形選択子
- 漢字の異体字は、このうち17番以降(U+E0100以降)を使うことになっています。したがって、字形選択子の範囲はU+E0100~U+E01EFですので240個(ただしU+E0100は基底文字と同じ字形なので実際には239個)まで指定できます。
基底文字に対応する字形選択子は「IVD」を跨いでユニークの定義が割り当てられています。
基底文字にはすべてのCJK統合漢字を指定できます。
2.IVD(Ideographic Variation Database)について
IVSは基底文字と字形選択子の組み合わせで異体字を表示するための仕組みであるのに対し、IVDはある文字集合に対応する異体字の字形コレクションです。
ユニコードコンソーシアムでは、現在3つのコレクションが登録されています。
- Adobe-Japan1----Adobe社が管理するAdobe-Japan1グリフ集合のコレクション
- Hanyo-Denshi----経産省・汎用電子情報交換環境整備プログラム委員会が管理する、住基ネット・戸籍システム・登記システム等での利用を想定したコレクション
- Moji_Joho----経産省・汎用電子情報交換環境整備プログラム委員会の成果を引き継ぎ(2010年11月14日版採用)、その普及を目的としてIVSの実装である「IPAmj明朝」フォントの基になるコレクション
上記のAdobe-Japan1に対応したフォントとしては、「小塚明朝」「小塚ゴシック」
Moji_Johoに対応しているフォントとしては、「IPAmj明朝」があります。
3.IVSのメリット
IVSフォントには既存システムでは外字として利用しなければならなかった文字が多く含まれます。
基本的に既存システムでは、外字が必要となった際、外字のデザインから、外字フォントの生成、利用端末への配布が都度必要でした。
IVSフォントを利用することで外字を必要とする機会が減り、コストが削減できます。また、異なるシステムでは別の外字フォントで運用されているため、IVSフォントへ置き換えることで相互互換性が高まります。
4.IVSの問題点
第1に、環境(OS、アプリケーション)としてIVSが利用できないケースがあるということです。この場合、IVSの表記が文字化けを起こします。
第2に、Adobe-Japan1とMoji_Johoでは、字形選択肢がユニークとなるコード定義ですが、字形としての互換性はありません。
ターゲットとするIVDが同じIVS対応フォントを選択しなければ、文字表示の一貫性が損なわれることとなります。また、同じIVDのIVSフォントでも実装によりすべての文字が網羅されているとは限りません。
相互運用に関しては弊社も参加しているIVS技術促進協議会のWGである相互運用性調査部会で協議が進められています。