文字コード‎ > ‎

Unicodeに関する小ネタ



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・アップル・サンなどのアメリカの企業が中心になり設立されたユニコードコンソーシアムが策定した規格
  • UCSISO/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