前回のポストではデジタル文字の始まりである ASCIIコード について学びました。 ASCIIは素晴らしいものでしたが、128というスペースでは世界中の言語を収納するには全く不十分でした。

今日は、ASCIIの限界を超え、ハングル、漢字、アラビア語、そして絵文字まで、世界のすべての文字を統合した巨大な約束であるユニコード(Unicode)について話しましょう。


インターネットの初期、他国のウェブサイトにアクセスすると、文字が崩れて のような記号で覆われている画面を見ることがよくありました。これを「モジバケ(Mojibake)」現象と呼びます。

理由は単純でした。各国、各言語圏ごとに異なる文字コード(Encoding)が使用されていたためです。 同じ2進数データを見ても、あるコンピュータは「これはハングルだ」と解釈し、別のコンピュータは「これは西欧の言語だ」と解釈することがありました。

このデジタルバベルの塔の混乱を収束させるために登場した救世主がユニコード(Unicode)です。

Surrounding the globe, various characters from different languages

1. ユニコードとは何か?



ユニコード(Unicode)は「ユニバーサルコード(Universal Code)」の略で、世界中のすべての文字に対して固有の番号(Code Point)を付与した国際標準です。

ASCIIコードが0から127までの番号を付けたのに対し、ユニコードはその範囲を事実上無限に拡張しました。 現在、ユニコードには14万字以上の文字が登録されており、ここには現存する言語だけでなく、古代の象形文字、楽譜記号、さらには私たちが日常的に使用する絵文字(Emoji)まで含まれています。

コードポイント (Code Point)

ユニコードは各文字にU+で始まる16進数番号をつけて管理します。

  • ラテン文字 'A': $U+0041$ (ASCIIコードと同じ)

  • ハングル '가': $U+AC00$

  • 漢字 '日': $U+65E5$

  • 絵文字 '😀': $U+1F600$

これで世界中のすべてのコンピュータは$U+1F600$という信号を受け取ると、言語設定に関係なく同じ笑顔(😀)を思い浮かべることができるようになりました。

2. ユニコードとUTF-8は同じものか?

多くの人が混乱する部分です。「ユニコード」とよく見られる「UTF-8」は異なります。 この2つの関係を理解することが今日の文章の重要なポイントです。

  • ユニコード: 文字と数字を結びつけた「地図(Map)」です。 (抽象的な約束)

  • UTF-8 (エンコーディング): その数字をコンピュータメモリーに実際に保存する「包装方法(Method)」です。

仮にユニコードが世界中のすべての物にID番号を付けた「カタログ」であれば、UTF-8はその物をトラックに積むために箱に包装する「技術」です。

3. なぜUTF-8が標準になったのか?



ユニコードの文字をコンピュータに保存する方法(エンコーディング)はUTF-16やUTF-32などいくつかあります。ですが、現在のウェブ(Web)世界の98%以上はUTF-8を使用しています。

UTF-8が勝利した理由は「可変長(Variable Width)」という天才的な効率性にあります。文字の種類に応じて保存スペース(Byte)が異なります。

文字の種類 ユニコード番号 UTF-8保存サイズ 特徴
基本ラテン語 A $U+0041$ 1 Byte ASCIIコードと100%互換
中東/ヨーロッパ語 Ω, ¶ $U+03A9$ 2 Bytes ラテン拡張、ギリシャ語など
CJK (中韓日) 한, 中, あ $U+D55C$ 3 Bytes ほとんどのアジア圏文字
絵文字/古代語 🚀 $U+1F680$ 4 Bytes 次元を超えた文字たち

UTF-8の利点

  1. ASCII互換性: 英文書を保存する際はASCIIコードとサイズが同じです。既存のシステムと完全に互換性があります。

  2. 効率性: よく使用する英数字は1バイトで短く、複雑な文字は長く保存し、全体の容量を最適化します。

4. 開発者がユニコードに対して注意すべき点

文字が1バイト(ASCII)で構成されていた時代とは異なり、ユニコード環境では「文字列の長さ」を計算する際に注意が必要です。

  • メモリの観点(Byte): 'A'は1、'한'は3です。

  • 文字の観点(Character): 'A'も1文字、'한'も1文字です。

過去の方式で文字列を切ったり保存したりすると、マルチバイト文字(ハングル、漢字など)の中間が切れてデータが壊れる事故が発生する可能性があります。 そのため、現代のプログラミング言語はこうしたユニコード処理を自動的にサポートするライブラリを基本的に内蔵しています。


まとめ

  1. ユニコード: 世界中のすべての文字に固有番号(Code Point)を付与した国際標準規約。

  2. 目的: 言語圏ごとに異なっていたエンコーディング方式を統合し、文字崩れ(モジバケ)現象解決。

  3. UTF-8: ユニコードを最も効率的に保存する方法。英語は1バイト、韓/中/日文字は3バイトで可変保存する。

ユニコードは単なる技術標準を超えて、言語の壁を越えて世界中が情報を交換できるデジタル時代の最も包括的なインフラです。


🚀 次回の投稿予告

私たちがテキストを保存する方法(エンコーディング)を知ったので、今度はデータをより巧妙に扱う方法を学ぶ番です。 「画像はどのように0と1に保存されるのか?」 ピクセルと解像度、そしてRGB色の原理についてとても簡単に説明します。

👇 一緒に読むと良い記事


役立っていれば、他のIT技術の話もお見逃しないように購読してください!