UTF-8とは?ASCIIコードとの違い・仕組み・使い方まで完全解説

目次

UTF-8とは?

UTF-8とは、世界中の文字を扱うための文字コードです。

英語だけでなく、日本語・中国語・絵文字などもすべて表現できます。

👉 現在のWebやプログラミングではほぼ標準です


ASCIIコードの復習

ASCIIコードは、1文字を1バイト(実質7ビット)で表す文字コードです。

文字10進数2進数
A651000001
a971100001

ASCIIコードの特徴

  • 表現できる文字数は 128文字
  • 英数字と記号のみ
  • 日本語は扱えない

👉 シンプルだけど現代では不十分です

ASCIIコードについてはこちらの記事で解説しています。


ASCIIコードの限界

ASCIIでは日本語は表現できません。

こんにちは → ????

👉 これは「文字化け」ではなく
そもそも対応していないのが原因です


UTF-8との違い(重要)

項目ASCIIUTF-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言語での例

C
#include <stdio.h>
#include <string.h>

int main() {
  char *s = "あ";
  printf("%zu\n", strlen(s));
  return 0;
}

👉 実行結果

C
3

文字コードで使われるchar型についてはこちらの記事で解説しています。

なぜ3になる?

👉 UTF-8では「あ」は3バイトだからです。


よくある落とし穴

① 文字数 ≠ バイト数

C
strlen("あ") == 3

👉 「1文字なのに3になる」問題です


② 1文字ずつ扱えない

C
s[0]

👉 これは「あ」の一部(バイト)であって、文字ではありません


③ 文字化けの原因

よくあるパターン👇

  • UTF-8で保存
  • Shift_JISで読み込む

👉 結果:文字化け


UTF-8はどこで使われている?

Web(HTML)

C
<meta charset="UTF-8">

👉 これを書かないと文字化けの原因になります


ファイル・エディタ

  • VSCode
  • テキストファイル
  • CSV

👉 基本はUTF-8でOKです


まとめ

  • ASCIIは英語専用のシンプルな文字コード
  • UTF-8は世界対応の拡張版
  • UTF-8は可変長で効率的
  • 文字数とバイト数は違う(重要)

👉 結論
現代はUTF-8を前提に考えるべきです

この記事が参考になった方へ

型を含むC言語の基本文法をこちらの記事で整理しています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

組み込みソフトエンジニアとして働きながら、
C言語・メモリ・ポインタなどの基礎から実務まで解説しています。

副業・キャリアについても実体験ベースで発信中です。

X(旧Twitter)でも発信しています
👉 Xはこちら

▼まずはここから読むのがおすすめ
C言語文法シリーズ
メモリ領域解説シリーズ

コメント

コメントする


目次