ふくふくHukuhuku Inc.
EP.03CS Basics対象: 中1以上 9分公開: 2026-05-10

文字コード:なぜ「文字化け」が起きるのか

「あ」がコンピュータでは E3 81 82 (UTF-8) や 82 A0 (Shift_JIS)。同じ文字でも符号化方法が違うと別物。文字コードの歴史と、現代では UTF-8 が標準になった理由、Python での実験まで。

#文字コード#UTF-8#Unicode#Shift_JIS#情報I
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

コンピュータは数字しか扱えない。じゃあ「あ」や「A」はどうやって表現する? 答えは 「文字に番号を振って、その番号を 2 進数で記録する」。この番号付けの規格が 文字コード です。

1. 文字コードの歴史

時期代表規格特徴
1960 年代ASCII英数字 + 記号、1 文字 = 7 ビット (128 文字)
1980 年代Shift_JIS / EUC-JP日本語対応、1 文字 = 1-2 バイト
1990 年代Unicode 提唱世界中の文字を 1 つの規格で
2000 年代以降UTF-8 普及Web 標準、後方互換性◎
現代UTF-8 + 絵文字毎年新しい絵文字追加、約 15 万文字

2. UTF-8 と Shift_JIS で「あ」を見比べる

Python で文字コードを変換
Python
# 「あ」を UTF-8 でバイト列にprint("あ".encode("utf-8"))# → b'\xe3\x81\x82'  (3 バイト)
# 「あ」を Shift_JIS でバイト列にprint("あ".encode("shift_jis"))# → b'\x82\xa0'  (2 バイト)
# 16 進で見やすくprint("あ".encode("utf-8").hex())     # 'e38182'print("あ".encode("shift_jis").hex()) # '82a0'
# Unicode コードポイントprint(ord("あ"))      # 12354print(hex(ord("あ"))) # '0x3042'
# 絵文字も同じprint("😀".encode("utf-8").hex())  # 'f09f9880' (4 バイト)print(hex(ord("😀")))               # '0x1f600'

3. なぜ文字化けが起きるか

保存時と読込み時の文字コードが違う と、バイト列を別の文字コードと解釈してしまい、無関係な文字が表示されます。

わざと文字化けを起こす
Python
# 「こんにちは」を UTF-8 で保存text = "こんにちは"data = text.encode("utf-8")
# Shift_JIS として読もうとすると...try:    print(data.decode("shift_jis"))  # ↓ 文字化け or エラーexcept UnicodeDecodeError as e:    print("読めませんでした:", e)
# 逆: Shift_JIS で保存したものを UTF-8 で読むdata_sjis = text.encode("shift_jis")print(data_sjis.decode("utf-8", errors="replace"))# → 文字化け文字 (U+FFFD) で埋められる

4. 現代では UTF-8 が標準

  • Web 標準: HTML / JSON / API はほぼ UTF-8
  • Python 3 のデフォルト: ファイル読み書きも UTF-8 が前提
  • Linux / macOS のデフォルト: 環境変数 LANG=ja_JP.UTF-8
  • Windows もメモ帳: 11 から UTF-8 がデフォルトに
  • Excel CSV だけは要注意: UTF-8 BOM 付きじゃないと文字化け

5. プログラマが守るべき 5 つのルール

  1. 1HTML は `<meta charset="UTF-8">` を必ず入れる
  2. 2Web API のレスポンスヘッダに `Content-Type: application/json; charset=utf-8`
  3. 3データベースは `utf8mb4` (絵文字対応版) を使う
  4. 4ファイル I/O: `open(file, encoding='utf-8')` を明示する
  5. 5Excel CSV: 出力時に BOM 付き UTF-8 で保存

6. 次の話

EP.04 では CPU の仕組み に進みます。「数値や文字をどうやって計算しているのか」、コンピュータの心臓部を覗きます。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp