UTF-8 単語


ニコニコ動画でUTF-8の動画を見に行く

ユーティーエフエイト

2.5千文字の記事
これはリビジョン 2970908 の記事です。
内容が古い・もしくは誤っている可能性があります。
最新版をみる

UTF-8とは、Unicodeの文字符号化形式/文字符号化方式の一つである。

概要

UTF-8とは、Unicodeの文字符号化形式/文字符号化方式の一つで、1文字は1〜4バイトのバイト列で表現される。最大の特長は、英数文字だけの場合はASCIIと完全互換(というか全く同じ内容)になることである。

Unicode文字の表現形式として広く用いられており、デファクトスタンダードであるとも言える。

長所

  • 英数字(ASCII文字)だけの場合はASCIIと全く同じ。従って英語圏ではASCIIを想定して作られた過去のプログラムがそのままUTF-8対応として通用する(ただし、2バイト文字が来たら壊れる)。
  • 英数字中心の場合はデータ量が少なくて済む。UTF-16やUTF-32は英数字もそれぞれ2バイト、4バイトで表現するので、データ量が2倍、4倍になる。
  • 文書データ(特にHTML)は本文のテキスト以外にもメタデータなどを大量に英数字で保有していることが多く、総合的に見ると英数字が1バイトで記述できる方がデータ量が少なくなる。

短所

  • 文字のバイト数が固定長であれば、n文字目の文字を取り出したい時に、n文字目が先頭から何バイト目から始まるか計算可能なので、すぐにアクセスできるが、UTF-8は文字のバイト数が可変長なので、先頭から順番に文字数を数えなくてはならない。
  • 同様に文書の文字数を知りたい時も先頭から末尾まで走査しなければならない。
    • この問題を克服しようとすると固定長のUTF-32にするしかないが、UTF-32はデータ量が大きくなるのでデメリットの方が目立ってくる。
  • 実は日本語の場合、UTF-8だと漢字が3-4バイト文字になるので、大半の漢字を2バイトで表現できるUTF-16の方がデータ量は少なくて済む。

ただ、これらの長所・短所もコンピューターの性能向上や大容量化、あるいはデータ構造の工夫等により問題になる場面は少なくなっている。実際の所、みんながUTF-8を標準で使うようにすればもう文字コードや文字化けで悩まなくてもいいよね、という側面が大きい。

詳細

1バイトを0と1に直した時、先頭からいくつ1が連続するかで役割が決まる。

  • 0(0xxxxxxx) → 1バイト文字
  • 1(10xxxxxx) → 2バイト目以降
  • 2(110xxxxx) → 2バイト文字の1バイト目
  • 3(1110xxxx) → 3バイト文字の1バイト目
  • 4(11110xxx) → 4バイト文字の1バイト目
  • 5以上(11111xxx) → UTF-8では使われない。

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バイト文字

1バイト文字については、ASCIIと同じである。2バイト以上の文字は、先頭に使用バイト数を決めるデータが来て、後ろにデータが続く。

1バイトの内訳は以下のようになる。

0-127(00-7F): 1バイト文字ASCII

7ビット

0-31と127は制御文字(改行コードなども含んでいる)

2バイト文字

194-223(C2-DF): 1バイト目。C0とC1(192-193)は最小バイト数の原則に反するため使用されない。

128-191(80-BF): 2バイト目以降(実際には最小のバイト数で表現するという規則により使用されない値がある。) 6ビット

11ビット

3バイト文字

224-239(E0-EF):  1バイト目

160-191(A0-BF): 2バイト目

128-191(80-BF): 3バイト目

16ビット

4バイト文字

240-244(F0-F4): 1バイト目

245-247(F5-F7)はUnicodeの上限値を超えるため使用されない。

21ビット

5バイト文字と6バイト文字

5バイト文字と6バイト文字は先頭バイトをそれぞれ

248-251(F8-FB)、252-253(FC-FD)にすれば実現可能だが、やはり最小バイト数の原則に反するかUnicodeの上限値を超えるため使用されない。

7バイト文字と8バイト文字

254-255(FE-FF): 5バイト文字と6バイト文字と同じく使用されないが、UTF-16やUTF-32のバイトオーダーマークと被るという事情もある。

バイトオーダーマーク

BOM(Byte Order Mark)と呼ばれる。

Byte Orderというのはデータを上位バイトから順に並べるビッグエンディアンと下位バイトから並べるリトルエンディアンを区別するという意味だが、

データを先頭の2-4バイトを読めば符号化形式が分かるようにする仕組みも兼ねている。

UTF-8では使用が許容されるというだけで推奨ではない。むしろ、ASCIIとの互換性が損なわれるので対応していない処理系も多い。

ちなみにUTF-8のBOMはEF BB BF(239 187 191)である。

1110 1111 1011 1011 1011 1111

1111 11 10 11 11 1111

U+FEFF: ZERO WIDTH NO-BREAK SPACE (ZWNBSP) は、改行禁止を表す零幅文字。

FE-FFはUTF-16とUTF-32でしか使われないので、

Windowsのメモ帳はBOMなしUTF-8の編集時に勝手にBOMを付加することで悪名高かったが、2019年5月のメジャーアップデートからBOMなしUTF-8がデフォルトになった。英数字だけだとASCIIと全く同じデータになるので、ASCIIだと思って解釈していたら突然2バイト文字が出てきてバグったなどという事態を避けるため、区別できるようにとBOMをつけていたのかもしれない。

関連項目

  • Unicode
  • ASCII
  • 文字コード / 文字化け
  • BOM / ZERO WIDTH NO-BREAK SPACE
  • メモ帳
  • i18n / l10n
  • プログラミング関連用語の一覧

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
雪音りう[単語]

提供: とりくろろめたん

もっと見る

急上昇ワード改

最終更新:2026/01/31(土) 11:00

ほめられた記事

最終更新:2026/01/31(土) 11:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP