Unicodeに関する子ネタをつらつらと書き連ねます。
- Unicodeは文字コードではなく文字集合
- UCSも文字コードではなく文字集合
- メモ帳やsakuraEditorやMKEditorでは保存時の文字コードに「Unicode」が存在するが、これは実体はUTF-16
- Unicodeには0面から16面の領域がある
- BMP(基本多言語面:Basic Multilingual Plane)はUnicodeの0面の部分を指す
- UTF-16は、BMPの範囲だけしか扱わない場合には、すべて2バイトで表現される
- UTF-16BEは、BMPの範囲に限定すればUnicodeの符号位置の値と同じ
- それ以外の領域を表現する場合は4バイトになる
- UTF-32はすべての文字を4バイトで表現する。計算不要だが、サイズが大きくなる
- UTF-32はテキストファイルで使用されることは少なく、主にシステムのメモリ上での管理や、符号位置の数で管理するデータベースなどで使用される
- UTF-8はASCIIと同じ部分は1バイト、その他のUnicodeの部分を2~4バイトで符号化。5~6バイトはUnicodeの範囲外を符号化するために使用するが、Unicodeによる定義とIETFによる最新の定義では、不正なシーケンスである。
- 初期のUnicode(1.1まで)は2バイト(16ビット・~U+FFFF)約6万字(65536)に世界中の文字をマッピングすることを目指していた
- Unicodeは2バイトの範囲に収めるために、似た文字を無理に統合する作業が行われ批判された
- しかしそれでも無理であることがわかり、1996年以降は3バイト(21ビット・~U+10FFFF)約100万字(1114112)に拡張した。そして現在(2011年10月)も策定が続けられている
- Unicodeはマイクロソフト・IBM・アップル・サンなどのアメリカの企業が中心になり設立されたユニコードコンソーシアムが策定した規格
- UCSはISO/IECが策定した国際規格
- UnicodeとUCSは別の規格
- UCSはもともとUnicodeとまったく異なる内容の文字集合を規定しようとしていた
- しかし同様の目的で内容が大きく異なる規格の並立を嫌い、Unicodeの内容をパクッた内容に変更した
- UCS-2は、UnicodeのBMPと同じ内容にした
- その他の部分も共通する点が多い
- とはいっても規格としてはやっぱり別物
- UTF-8にはUnicodeの「Unicode Transformation Format-8」とUCSの「UCS Transformation Format 8」がある。内容が少しずつ異なる
- 情報処理技術者試験の問題に、「Unicodeはすべての文字を2バイトで表現云々」と書いてあったがそれは20世紀のUnicodeの話。バージョンでいうと1.1まで
- そもそも2バイトでは約6万文字しか表現できないため、10万文字を超えるといわれる漢字を収録しきることができない
- 問題を正しくするなら「Unicodeは世界中の文字を統一的に扱うことを目指した文字集合で、バージョン1.1までは2バイト(16ビット)だったが、1996年に策定されたバージョン2では3バイト(21ビット)に改められた」とか
- そして、情報処理技術者試験の担当者もそのことに気づいたようで平成19年の問題から「UCS-2(Unicode)を説明したものはどれか」と、「UCS-2」に限定する問題に修正した。
- しかし「UCS-2」自体が古く時代に対応できない規格であるため、2011年の改訂ではdeprecated(廃止予定)とされた。そんな問題を出題し続けるのか…
Unicodeの符号位置の値と、各符号化方式により表現されるバイト表現の例
|
半角空白 |
A |
あ |
Unicode |
U+0020 |
U+0041 |
U+3042 |
UTF-16BE |
00 20 |
00 41 |
30 42 |
UTF-16LE |
20 00 |
41 00 |
42 30 |
UTF-8 |
20 |
41 |
E3 81 82 |
UTF-7 |
20 |
41 |
2B 4D 45 49 2D |
Unicodeは符号位置の値、UTFは表現値。
2011/10/10 |