先に要点
- UTF-8 は、文字をコンピュータの中でどう並べて保存・送受信するかを決める文字コードの一種 です。
- Unicode の文字を表すための代表的なエンコーディング で、日本語、英語、記号、絵文字まで広く扱えます。
- Web、JSON、HTML、CSS、JavaScript、API、各種テキストファイルで広く使われており、今は「まず UTF-8 を選ぶ」が基本 です。
- 初心者向けに一言で言うと、UTF-8 は「文字化けしにくく、いろいろな文字を一緒に扱いやすい、今の標準寄りの文字コード」 です。
UTF-8 ってよく見るけど、結局何? 文字コードって何が違うの? Shift_JIS とどう違うの? というのは、最初につまずきやすいところです。
でもここを雑に理解すると、CSV、Excel、Web、メール、DB で同じような文字化けを何度も踏みます。
この記事では、UTF-8 とは何かを、文字コードの基本、Unicode との関係、なぜ今よく使われるのか の順で整理します。
前に公開した 文字化けって何?防止方法、復元方法は? や CSVをExcelで開くと文字化けするのはなぜか の土台として読める形にしています。
そもそも文字コードとは何か
コンピュータは、文字をそのまま理解しているわけではありません。
内部では、文字は最終的にバイト列として保存されます。
たとえば人間には あ も A も 😊 も文字として見えますが、コンピュータの中では
- どの文字を
- どんなルールで
- 何バイトで表すか
を決める必要があります。
この 文字をバイト列にするルール が文字コードです。
UTF-8とは何か
UTF-8 は、その文字コードのひとつです。
もっと正確に言うと、Unicode の文字をバイト列へ変換する方法のひとつ です。
ここで大事なのは、UTF-8 自体が 文字の一覧 ではなく、文字を保存・送信するための表し方 だという点です。
初心者向けにざっくり言うなら、
- Unicode
どんな文字があるかをまとめた大きな土台 - UTF-8
その文字を実際にどうバイトで表すかの方法
という理解でかなり十分です。
Unicodeとの関係
ここは混ざりやすいので分けておくと楽です。
Unicode
Unicode は、世界中の文字をなるべく共通に扱うための仕組みです。
日本語、英語、中国語、アラビア語、記号、絵文字などをひとつの大きな枠組みで管理しようとしています。
UTF-8
UTF-8 は、その Unicode の文字を実際のバイト列にするやり方です。
つまり、
- Unicode = 文字の土台
- UTF-8 = その土台を実際に保存する方法
です。
ここを混ぜて UTF-8 = 文字の種類 と思うと、後で分かりにくくなります。
なぜ UTF-8 がよく使われるのか
1. 日本語も英語も同じ土台で扱いやすい
昔は、英語圏は英語圏、日本語圏は日本語圏で別の文字コードを使うことが多く、そこから文字化けが起きやすくなっていました。
UTF-8 は Unicode を前提にしているので、日本語と英語と記号と絵文字を同じ土台で扱いやすいです。
今の Web や API で UTF-8 が強いのは、この 混在に強い ところが大きいです。
2. ASCII と相性がよい
UTF-8 では、英数字や基本記号の範囲は ASCII と互換があります。
つまり英語だけのテキストなら、昔ながらの ASCII 系とかなり自然につながります。
この性質のおかげで、
- 英語中心のプログラム
- 設定ファイル
- HTML や JSON
と相性がよく、広く普及しました。
3. Web の標準寄りだから
WHATWG の Encoding Standard や MDN でも、今の Web では UTF-8 が基本です。
HTML の <meta charset="utf-8"> や HTTP の charset=utf-8 を見かけるのはそのためです。
実務でも、
- HTML
- CSS
- JavaScript
- JSON
- API レスポンス
- Markdown
- 設定ファイル
の多くで、まず UTF-8 を使う前提になっています。
UTF-8 の「8」って何?
ここもよく聞かれます。
UTF-8 の 8 は、8ビット単位の並びを使う方式 という名前の一部です。
ただし、1文字 = 8ビット固定 という意味ではありません。
ここは誤解しやすいです。
UTF-8 では、文字によって使うバイト数が変わります。
- 英数字は少ないバイト数
- 日本語はそれより多いバイト数
- 絵文字はさらに多いことがある
つまり UTF-8 は、可変長の文字コード です。
初心者向けには、英語は軽く、日本語や絵文字は少し重い くらいの感覚で十分です。
Shift_JIS と何が違うのか
日本語圏でよく比べられるのが Shift_JIS です。
Shift_JIS は、日本語 Windows や古い業務システム、Excel 前提の CSV 運用などで今でも出てくることがあります。
ただし、UTF-8 と比べると次の違いがあります。
UTF-8 の強み
- 世界中の文字を扱いやすい
- Web や API で標準寄り
- JSON や HTML と相性がよい
- システム連携で将来的に扱いやすい
Shift_JIS の特徴
- 古い日本語環境ではなじみが深い
- Excel 前提の運用で相性がよいことがある
- 文字の種類によっては扱いづらい
- 多言語や記号、絵文字では不利になりやすい
だから今の基本は UTF-8 ですが、業務の相手が誰か によって Shift_JIS がまだ残ることがあります。
BOM とはどう関係するのか
UTF-8 を調べると、よく BOM が出てきます。
BOM は、ファイル先頭に付く目印のようなものです。
UTF-8 では BOM は必須ではありません。
ただし、相手のツールが UTF-8 と認識しやすくなる場面があります。
特に Excel の CSV では、Microsoft 公式でも UTF-8 CSV は BOM 付きなら通常どおり開ける と案内されています。
なので、UTF-8 と BOM は別物ですが、実務では一緒に出てきやすいです。
UTF-8 なら絶対に文字化けしないのか
しません、とは言えません。
UTF-8 自体は強いですが、読む側が UTF-8 として読まないと文字化けは起きます。
たとえば、
- UTF-8 の CSV を Excel が別の文字コードで開く
- UTF-8 の HTML なのに
charset指定がズレている - DB 接続側だけ別エンコーディングになっている
といった場合は、UTF-8 でも文字化けします。
つまり大事なのは、
- UTF-8 で保存する
- UTF-8 と伝える
- UTF-8 として読む
の3つをそろえることです。
初心者向けにどう理解すればいい?
実務で困らない理解としては、次の順で十分です。
1. 文字コードは「文字を保存するルール」
まずここだけ押さえます。
文字は見た目そのままではなく、バイト列で保存されるので、そのルールが必要です。
2. UTF-8 は今いちばんよく使う文字コード
Web、API、テキストファイルでは、まず UTF-8 を疑う、選ぶ、そろえる、でだいたい合います。
3. UTF-8 でも読み方がズレれば文字化けする
これが大事です。
UTF-8 を選べば終わりではなく、相手も UTF-8 として読めるかを見る必要があります。
4. Excel や古い業務システムは例外がある
ここだけ実務の注意点です。
CSV と Excel の組み合わせでは、UTF-8+BOM や取り込み手順まで考えた方が安定します。
実務で最初にやるとよいこと
もし自分でシステムやファイル出力を触るなら、最初に次を統一するとかなり楽です。
- ソースコードは UTF-8
- HTML は
<meta charset="utf-8"> - HTTP レスポンスは
charset=utf-8 - JSON は UTF-8
- CSV は利用先に応じて UTF-8+BOM か運用手順を決める
この土台があるだけで、文字化けトラブルはかなり減ります。
まとめ
UTF-8 は、Unicode の文字を保存・送信するための代表的な文字コード です。
日本語、英語、記号、絵文字まで広く扱え、今の Web やテキスト処理では基本の選択肢になっています。
初心者向けには、
- 文字コードは文字をバイト列にするルール
- UTF-8 は今いちばんよく使うルール
- ただし保存・送信・表示がそろわないと文字化けする
この3つを押さえれば十分です。
実務では とりあえず UTF-8 がかなり強いですが、CSV と Excel のように例外的な運用もあるので、相手がどう読むか まで見るのがいちばん大事です。
この記事と一緒に読みたい
参考リンク
- WHATWG: Encoding Standard
- MDN: Content-Type header