【ゆにこーど】

Unicode とは?

💡 世界中の文字を「一意の番号」で管理する文字の国際標準
📌 このページのポイント
Unicode ― 世界中の文字を統一管理 昔: バラバラの文字コード ASCII Shift_JIS EUC-KR → 文字化けの原因に 今: Unicode で統一 A é α 🎉 14万文字以上を収録 絵文字も含む エンコーディング方式 UTF-8 Web標準・可変長 UTF-16 Java/JS内部 UTF-32 固定長・処理が速い
Unicodeのイメージ
ひよこ ひよこ

UnicodeとUTF-8って何が違うの?

ペンギン先生 ペンギン先生

Unicodeは「各文字に番号を割り当てる規格」、UTF-8はその番号をコンピュータが扱えるバイト列に「変換する方式」。Unicodeが「あ=U+3042という番号」と定義して、UTF-8がその番号を「E3 81 82という3バイト」に変換する。

ひよこ ひよこ

絵文字もUnicodeに入ってるの?

ペンギン先生 ペンギン先生

入ってる!絵文字もUnicodeのコードポイントが割り当てられている。「😀」はU+1F600。スマホやOSが対応するUnicodeバージョンによって使える絵文字の種類が変わる。新しい絵文字は毎年Unicodeコンソーシアムが追加を発表する。

ひよこ ひよこ

昔はなぜバラバラだったの?

ペンギン先生 ペンギン先生

国ごとに文字コードを独自に作っていたから。日本はShift-JIS・EUC-JP、韓国はEUC-KR、中国はGB2312と各国がバラバラの規格を使っていた。これらが混在する環境で文字化けが頻発していた。Unicodeはこれを統一しようとして生まれた。

ひよこ ひよこ

Unicodeが統一したのに、まだ文字化けが起きるのはなぜ?

ペンギン先生 ペンギン先生

UnicodeにはUTF-8・UTF-16・UTF-32という複数のエンコーディング方式があって、どれを使っているか正しく判定できないと化けるんだ。Windowsのメモ帳でUTF-8のファイルをANSI(Shift-JIS)として開くとまだ化ける。BOM(バイトオーダーマーク)という目印が先頭についていれば判別できるけど、BOMなしUTF-8が主流だから判定ミスが起きやすいよ。

ひよこ ひよこ

プログラミングでUnicodeのハマりどころってある?

ペンギン先生 ペンギン先生

結合文字の問題が有名だよ。「が」は1文字で表す方法(U+304C)と、「か」+「゛」の2文字で表す方法がある。見た目は同じなのに文字列比較でfalseになる。NFC正規化で統一するのが対策。Pythonのunicodedata.normalize('NFC', text)やJavaScriptのtext.normalize('NFC')を使う。ファイル名にUnicodeを使うとmacOS(NFD)とWindowsNFC)で互換性問題が起きることもあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Unicodeって出てきたら「世界中の文字に一意の番号を割り当てた国際標準、UTF-8はその実装エンコード方式」と思えばOK!
📖 おまけ:英語の意味
「Unicode」 = ユニ(統一)コード
💬 Uni(統一)+Code(コード)。バラバラだった各国の文字コード規格を「一つの統一されたコード体系」にまとめることを目指して1987年に開発が始まった
← 用語集にもどる