【ゆーてぃーえふえいと】

UTF-8 とは?

💡 世界の文字を1つの「エンコーディング」で表現
📌 このページのポイント
UTF-8 エンコーディングの仕組み 文字ごとにバイト数が変わる(可変長) 1バイト A → 0x41 ASCII互換 2バイト ñ → 0xC3 0xB1 欧州言語など 3バイト あ → 0xE3 82 82 日本語・中国語など 4バイト 絵文字など 補助文字 文字コードの比較 UTF-8 Web標準(97%以上) ASCII互換・可変長 UTF-16 Windows内部で使用 2 or 4バイト Shift_JIS 日本語レガシー 文字化けの原因に ※ 現在のWeb標準はUTF-8に統一されている
UTF-8エンコーディングの仕組みと比較
ひよこ ひよこ

なぜ文字コードがいろいろあるの?

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

コンピュータ黎明期はASCII(英数字128文字)だけで足りた。日本語を扱うためにShift_JIS、EUC-JPが作られ、韓国にはEUC-KR、中国にはGB2312が。国ごとに別の文字コードになって、混在すると文字化けUnicodeは「世界中の文字に番号を振る」統一規格で、UTF-8はその最も普及した実装形式だよ

ひよこ ひよこ

なんでUTF-8が主流になったの?

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

ASCII互換性(英数字のバイト列が同じだから既存システムに影響なし)、②NULLバイトを含まない(C言語文字列関数がそのまま使える)、③可変長で英語圏のデータが小さい、④自己同期性(途中から読んでも文字の境界がわかる)。UTF-16(JavaWindows内部)もあるけど、Web/通信はUTF-8一強だよ

ひよこ ひよこ

文字化けが起きるのはなぜ?

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

送信側と受信側で文字コードが違うから。UTF-8で保存したファイルをShift_JISとして開くと文字化けする。対策は①必ずUTF-8で統一する、②HTMLを書く、③CSVBOM付きUTF-8にする(Excel文字化け防止)、④データベースのcharsetをutf8mb4に設定する

ひよこ ひよこ

utf8とutf8mb4の違いは?

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

MySQLのutf8は歴史的な理由で3バイトまでしか対応せず、絵文字(4バイト)が保存できない。utf8mb4が本来のUTF-8で4バイト文字も対応。MySQLでUTF-8を使うなら必ずutf8mb4を選ぶこと。2019年のMySQL 8.0からはデフォルトがutf8mb4になったけど、古いDBではutf8のままのことがあるから注意だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「UTF-8」って出てきたら「世界標準の文字エンコーディング」と思えればだいたいOK!
📖 おまけ:英語の意味
「Unicode Transformation Format - 8-bit」 = Unicode変換形式8ビット
💬 8-bitは最小単位が8ビット(1バイト)の意味。1992年にKen Thompsonらが設計したよ
← 用語集にもどる