文字化けは変換表の食い違い
コンピューターは、「あ」という文字をそのまま保存できません。すべての情報を数値として扱うので、「あ」はこの番号、「い」はこの番号、という変換表が必要になります。エンコーディングは、この文字と数値を対応させる変換のルールです。
モールス信号を思い浮かべると分かりやすいでしょう。「A」を「・-」に置き換えるという表を、送る側も受ける側も持っていれば、メッセージは正しく届きます。でも受ける側が別の表で読めば、まったく違う文として解読されてしまいます。
文字化けは、まさにこれです。「UTF-8」や「Shift_JIS」は、それぞれ別の変換表です。UTF-8 で書かれたファイルを Shift_JIS の表で読めば、見たこともない記号が並びます。
エンコーディングは、読める形をそろえるための変換で、秘密を守るための暗号化とは目的が違います。表さえ分かれば誰でも元に戻せます。ハッシュや暗号化との違いはエンコード・ハッシュ・暗号化の違いで詳しく整理しています。
文字化けが起きやすい場面
どちらのパソコンも壊れてはいません。書いた側と読んだ側で、変換表が違っているだけ。
| 場面 | 起きていること | 合わせ方 |
|---|---|---|
| CSV を Excel で開いたら日本語が化けた | ファイルは UTF-8、Excel が別の表で読んでいる | 保存時と読み込み時の表をそろえる |
| Webページの日本語が化けた | ブラウザに「この表で書いた」と伝わっていない | HTML の先頭近くに <meta charset="UTF-8"> を書く |
| API でやり取りした文字が化けた | 送る側と受ける側で表が違う | 使う表を事前に決めて統一する |
URL に %E3%81%82 のような文字列が並ぶ | 日本語を URL で使える形に置き換えている(パーセントエンコーディング) | 化けているのではなく、正しい変換 |
新しく作るシステムやWebサイトなら、基本は UTF-8 一択です。古いシステムと連携するときは、Shift_JIS などへの変換が必要になることがあります。
「UTF-8 で書いたはずなのに化ける」という相談の多くは、ファイル自体の表と、ブラウザやシステムに伝えている表がずれているケースです。書いただけでなく、正しく伝わっているかまで確かめてください。
ちなみに、現場では「文字コード」という言葉もほぼ同じ意味で使われます。厳密には、文字と番号の対応表を文字コード、その変換の方法をエンコーディングと分ける整理もあります。
