UTF-8とは?
UTF-8とは、世界中の文字を扱うための文字コードです。
英語だけでなく、日本語・中国語・絵文字などもすべて表現できます。
👉 現在のWebやプログラミングではほぼ標準です
ASCIIコードの復習
ASCIIコードは、1文字を1バイト(実質7ビット)で表す文字コードです。
| 文字 | 10進数 | 2進数 |
|---|---|---|
| A | 65 | 1000001 |
| a | 97 | 1100001 |
ASCIIコードの特徴
- 表現できる文字数は 128文字
- 英数字と記号のみ
- 日本語は扱えない
👉 シンプルだけど現代では不十分です
ASCIIコードについてはこちらの記事で解説しています。

ASCIIコードの限界
ASCIIでは日本語は表現できません。
こんにちは → ????
👉 これは「文字化け」ではなく
そもそも対応していないのが原因です
UTF-8との違い(重要)
| 項目 | ASCII | UTF-8 |
|---|---|---|
| バイト数 | 1バイト固定 | 1〜4バイト |
| 文字数 | 128文字 | ほぼ無限 |
| 日本語 | ❌ | ✅ |
| 互換性 | – | ASCIIを含む |
👉 UTF-8はASCIIの上位互換に近い存在です
UTF-8の仕組み(コア理解)
UTF-8は可変長エンコードです。
👉 文字によってバイト数が変わります
| 文字 | バイト数 |
|---|---|
| 英数字 | 1バイト |
| 日本語 | 3バイト |
| 絵文字 | 4バイト |
UTF-8のビット構造(ざっくり)
UTF-8は、先頭ビットで「何バイトか」を判定します。
| バイト数 | ビットパターン |
|---|---|
| 1バイト | 0xxxxxxx |
| 2バイト | 110xxxxx |
| 3バイト | 1110xxxx |
| 4バイト | 11110xxx |
👉 これがUTF-8の本質です
例:「あ」の場合
あ → U+3042UTF-8:
11100011 10000001 10000010
👉 3バイトで表現されます
UTF-8の強み
① 世界中の文字を扱える
多言語対応に必須です
② ASCIIと互換性がある
英数字はそのまま使えます
③ データ効率が良い
必要な分だけバイトを使います
実務でのUTF-8(ここが超重要)
ここからが「分かる→使える」の差です👇
C言語での例
#include <stdio.h>
#include <string.h>
int main() {
char *s = "あ";
printf("%zu\n", strlen(s));
return 0;
}👉 実行結果
3文字コードで使われるchar型についてはこちらの記事で解説しています。

なぜ3になる?
👉 UTF-8では「あ」は3バイトだからです。
よくある落とし穴
① 文字数 ≠ バイト数
strlen("あ") == 3👉 「1文字なのに3になる」問題です
② 1文字ずつ扱えない
s[0]👉 これは「あ」の一部(バイト)であって、文字ではありません
③ 文字化けの原因
よくあるパターン👇
- UTF-8で保存
- Shift_JISで読み込む
👉 結果:文字化け
UTF-8はどこで使われている?
Web(HTML)
<meta charset="UTF-8">👉 これを書かないと文字化けの原因になります
ファイル・エディタ
- VSCode
- テキストファイル
- CSV
👉 基本はUTF-8でOKです
まとめ
- ASCIIは英語専用のシンプルな文字コード
- UTF-8は世界対応の拡張版
- UTF-8は可変長で効率的
- 文字数とバイト数は違う(重要)
👉 結論
現代はUTF-8を前提に考えるべきです
この記事が参考になった方へ
型を含むC言語の基本文法をこちらの記事で整理しています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。

コメント