UTF-8とは、Unicodeの文字符号化形式/文字符号化方式の一つである。
UTF-8とは、Unicodeの文字符号化形式/文字符号化方式の一つで、1文字は1〜4バイトのバイト列で表現される。最大の特長は、英数文字だけの場合はASCIIと完全互換(というか全く同じ内容)になることである。
Unicode文字の表現形式として広く用いられており、デファクトスタンダードであるとも言える。
ただ、これらの長所・短所もコンピューターの性能向上や大容量化、あるいはデータ構造の工夫等により問題になる場面は少なくなっている。実際の所、みんながUTF-8を標準で使うようにすればもう文字コードや文字化けで悩まなくてもいいよね、という側面が大きい。
1バイトを0と1に直した時、先頭からいくつ1が連続するかでそのバイトの役割が決まる。
1バイトの割当を円グラフにすると以下のようになる。
| 0-31, 127 | 制御文字 | |
| 32-126 | 英数記号 | |
| 128-191 | 2バイト目以降 | |
| 192-193 | 不使用(2バイト文字先頭) | |
| 194-223 | 2バイト文字先頭 | |
| 224-239 | 3バイト文字先頭 | |
| 240-244 | 4バイト文字先頭 | |
| 245-247 | 不使用(4バイト文字先頭) | |
| 248-255 | 不使用(5バイト以上相当) |
1バイト文字については、ASCIIと同じである。
ASCIIは7ビット、つまり0-127(00-7F)だが、0-31と127は制御文字であり、改行コードなどを除けば通常のテキストでは使用されない。
残りの32-126はアルファベットの大文字・小文字、数字と各種記号である。
2バイト以上の文字は、先頭に使用バイト数を決めるデータが来て、後ろにデータが続く。2バイト目以降には128-191(80-BF)が使われるが、先頭の2ビットは10で固定なので残りの6ビットがデータ部分となる。
2バイト目の先頭バイトは194-223(C2-DF)である。先頭の3ビットが110で固定なので、5ビットがでデータ部分となり、2バイト目と合わせて11ビットまでのUnicodeが表現可能である。
C0とC1(192-193)は、データ部分のビットが00000と00001であり、2バイト目の6ビットと合わせても、7ビット(1バイト文字)で表現可能である。Unicodeには最小バイト数で表現しなければならないという原則があるため使用されない(故意に冗長なバイト列にしてセキュリティチェックをすり抜ける問題が発生したためルールが追加された)。
3バイト文字の先頭バイトは224-239(E0-EF)である。先頭4ビットが1110で固定のため、残り4ビットと、2-3バイト目の6×2バイトで16ビットまでのUnicodeが表現可能である。
最小バイト数の原則により、11ビットまでで表現可能なものは除かれるので、2バイト目は1010 0000(2) 以上でなければならないため、160-191(A0-BF)に限られる。
4バイト文字の先頭バイトは240-244(F0-F4)である。先頭5ビットが11110で固定のため、残り3ビットと、2-4バイト目の6×3バイトで21ビットまでのUnicodeが表現可能である。
最小バイト数の原則により、16ビットまでで表現可能なものは除かれるので、2バイト目は1001 0000(2) 以上でなければならないため、144-191(90-BF)に限られる。
Unicodeの上限値はU+10FFFF(1 0000 1111 1111 1111 1111(2))である。245-247(F5-F7)はデータ部分が101-111であり2バイト目以降の18ビットと合わせるとUnicodeの上限値を超えるため使用されない。
5バイト文字と6バイト文字は先頭バイトをそれぞれ248-251(F8-FB)、252-253(FC-FD)にすれば実現可能だが、やはり最小バイト数の原則に反するかUnicodeの上限値を超えるため使用されない。
254-255(FE-FF): 5バイト文字と6バイト文字と同じく使用されないが、UTF-16やUTF-32のバイトオーダーマークと被るという事情もある。
テキストファイルの先頭にU+FEFF: ZERO WIDTH NO-BREAK SPACE (ZWNBSP) を付加することができ、BOM(Byte Order Mark)と呼ばれる。Byte Orderというのはデータを上位バイトから順に並べるビッグエンディアンと下位バイトから並べるリトルエンディアンを区別するという意味だが、データを先頭の2-4バイトを読めば符号化形式が分かるようにする仕組みも兼ねている。
UTF-8では使用が許容されるというだけで推奨ではない。むしろ、ASCIIとの互換性が損なわれるので対応していない処理系も多い。
ちなみにUTF-8のBOMはEF BB BF(239 187 191)である。
これを2進数に変換すると、
1110 1111 1011 1011 1011 1111
1110から始まるので3バイト文字だと分かる。さらにデータ部分を抜き出すと
1111 11 1011 11 1111 = 1111 1110 1111 1111 = FEFF
U+FEFF: ZERO WIDTH NO-BREAK SPACE (ZWNBSP) は、改行禁止を表す零幅文字である。
Windowsのメモ帳はBOMなしUTF-8の編集時に勝手にBOMを付加することで悪名高かったが、2019年5月のメジャーアップデートからBOMなしUTF-8がデフォルトになった。
英数字だけだとASCIIと全く同じデータになるので、ASCIIだと思って解釈していたら突然2バイト文字が出てきてバグったなどという事態を避けるため、区別できるようにとBOMをつけていたのかもしれない。
急上昇ワード改
最終更新:2026/01/31(土) 02:00
最終更新:2026/01/31(土) 02:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。