FE EXAM

Unicode(世界共通の文字コード)

世界中の文字を1つの体系で扱う国際的な文字コード規格

DIAGRAM
基本多言語面(BMP)補助面
Unicode の統一符号体系(コードポイントと平面)すべての文字に「コードポイント」(U+XXXX)を割り当てるA→ U+0041→ U+3042😀→ U+1F600言語・記号・絵文字もすべて同じ番号体系コードポイントは「面(プレーン)」に分かれている(全17面)基本多言語面(BMP / 第0面)U+0000 〜 U+FFFF(65,536文字)世界の主要文字をほぼ網羅:ラテン・かな・漢字・キリル・アラビア 等日常の文字はほとんどここに収まる補助面(第1〜16面)U+10000 〜 U+10FFFFBMPに入りきらない文字を収録:絵文字・古代文字・珍しい漢字 等絵文字 😀 は補助面(第1面)コードポイント → エンコーディングで実際のバイト列にするコードポイント(U+XXXX)UTF-81〜4バイト可変長UTF-162 or 4バイトUTF-32常に4バイト固定
解説

📌
Unicodeとは

世界中の文字を1つの番号体系に統一A😀1つのUnicode

Unicode(ユニコード)とは、世界中のあらゆる文字を、たった1つの番号体系でまとめて表せるようにした国際的な文字コード規格です。英語・日本語・中国語・アラビア語はもちろん、記号や絵文字、古代の文字まで、すべての文字に重複しない固有の番号を割り当てています。

Unicodeが生まれた背景には、Shift_JIS・EUC-JPなど「国ごと・環境ごとにバラバラの文字コードがあって文字化けが多発した」問題があります。同じ番号でも国によって違う文字を表していたため、データをやり取りすると文字が壊れたのです。そこで「世界中の文字を1つの表に統合してしまえば文字化けは起きない」という発想で作られました。

身近な例で言うと、世界中の電話番号を「国際電話番号」として1つの体系にまとめたのに似ています。どの国の文字でも世界共通の番号で指せるので、相手の国や機種を気にせず文字をやり取りできます。上の図解では、各文字に振られる番号(コードポイント)と、それを実際のデータにする方法をまとめています。

🔢
コードポイントの概念

コードポイントとは、Unicodeが1文字に割り当てる固有の番号のことです。U+ に続けて16進数で書く決まりで、たとえば「A」は U+0041、「あ」は U+3042、絵文字の「😀」は U+1F600 です。

ここで大切なのが「コードポイントは文字に振られた番号にすぎず、実際のバイト列とは別物」という点です。U+3042 はあくまで「あ」の住所であって、それをコンピュータに保存・送信するときに何バイトでどう並べるかは、後述のエンコーディング(UTF-8など)が決めます。「番号付けの仕様」と「バイトへの変換方法」を分けて考えるのがUnicodeの基本です。

膨大な数のコードポイントは「面(プレーン)」という単位に分けて整理されています。
基本多言語面(BMP / 第0面)U+0000〜U+FFFF の65,536文字。世界の主要な文字(ラテン・かな・漢字など)がほぼここに収まる
補助面(第1〜16面)U+10000〜U+10FFFF。BMPに入りきらない絵文字・古代文字・珍しい漢字など
全体の範囲U+0000〜U+10FFFF(約111万のコードポイント)

身近な例で言うと、巨大な図書館を「フロア(面)」と「棚番号(コードポイント)」で管理するイメージです。日常的に使う本(文字)は1階(BMP)にまとまっており、専門書や珍しい資料(絵文字・古代文字)は上の階(補助面)にある──そう考えると整理しやすいです。基本となるのは「BMP=U+0000〜U+FFFF」「コードポイントはU+で表す」という点です。

🔗
UTF-8/16/32との関係

Unicodeは「どの文字にどの番号を振るか」を決める仕様であり、その番号(コードポイント)を実際のバイト列に変換する方法UTF(Unicode Transformation Format)です。UTFには主に3種類あり、いずれも同じUnicodeのコードポイントを、違うバイトの並べ方で表したものです。

方式1文字のバイト数特徴主な用途
UTF-81〜4バイト(可変長)ASCII互換・省サイズWeb・ファイルの標準
UTF-162 or 4バイトBMPは2バイト固定Windows・Java内部
UTF-32常に4バイト固定計算が単純・容量大内部処理(限定的)

3つの違いは「1文字を何バイトで表すか」です。
UTF-8:よく使う文字を少ないバイトで表す可変長。ASCIIは1バイトで互換性があり、現在のWebやファイルの標準
UTF-16:BMPの文字を2バイト、補助面の文字を4バイト(サロゲートペア)で表す
UTF-32:どの文字も4バイト固定。1文字=4バイトと単純だが容量を多く使う

身近な例で言うと、同じ住所(コードポイント)を、ハガキ・封筒・宅配伝票という別々の用紙に書くようなものです。書く中身(指す文字)は同じでも、用紙(UTF-8/16/32)によって書き方やサイズが変わります。「Unicode=文字の番号付け」「UTF-8/16/32=その符号化方式」「UTF-8が最も普及」という関係を区別して理解しておくことが大切です。

関連コンテンツ