文字集合 (キャラクタセット)

特定の文字の集まりとその番号付けの体系。ASCII、ISO 8859、Unicode などが代表的。

文字集合 (キャラクタセット) とは、特定の文字の集まりとそれぞれの文字に割り当てられた番号 (コードポイント) の体系です。ASCII は 128 文字、ISO 8859-1 は 256 文字、Unicode は 14 万文字以上を定義しています。コンピュータがテキストを扱うための最も基礎的な仕組みであり、どの文字集合を採用するかによって表現可能な文字の範囲が決まります。

文字集合と文字エンコーディングは混同されやすいですが、明確に異なる概念です。文字集合は「どの文字に何番を割り当てるか」という対応表を定義し、エンコーディングは「その番号をどのようなバイト列で表現するか」を定義します。Unicode という文字集合に対して、UTF-8、UTF-16、UTF-32 という複数のエンコーディングが存在するのはこのためです。文字コード解説の書籍で体系的に学べます。

歴史的に、各国・各地域が独自の文字集合を策定してきました。日本では JIS X 0208 (約 6,800 文字)、中国では GB 2312 (約 7,400 文字)、韓国では KS X 1001 が使われてきました。これらの文字集合は互いに互換性がなく、異なる文字集合で作成されたテキストを開くと文字化けが発生します。Unicode はこの問題を解決するために、世界中の文字を一つの体系に統合した文字集合です。

HTML の <meta charset="UTF-8"> は厳密には文字エンコーディングの指定ですが、歴史的経緯から charset (文字集合) という名前が使われています。Web 開発では UTF-8 が事実上の標準となっており、W3C も UTF-8 の使用を推奨しています。HTTP レスポンスヘッダーの Content-Type: text/html; charset=UTF-8 と HTML の meta タグの両方で指定するのがベストプラクティスです。

よくあるトラブルとして、データベースの文字集合設定の不一致があります。MySQL で utf8 を指定すると最大 3 バイトの文字しか扱えず、絵文字 (4 バイト) が保存できません。utf8mb4 を使用することで、Unicode の全文字を正しく格納できます。

文字数カウントの観点では、使用する文字集合によって表現可能な文字の範囲が決まります。ASCII では日本語を表現できず、Shift_JIS では一部の Unicode 文字が扱えません。Unicode であれば世界中の文字を統一的に扱えるため、多言語対応のシステムでは Unicode ベースの文字集合が必須です。国際化と文字コードの書籍も参考になります。