文字化けを防ぐ、エンコーディングの合わせ方

エンコーディングは、文字や画像などの情報をコンピューターが扱えるデータ形式に変換するルールです。

文字化けは変換表の食い違い

コンピューターは、「あ」という文字をそのまま保存できません。すべての情報を数値として扱うので、「あ」はこの番号、「い」はこの番号、という変換表が必要になります。エンコーディングは、この文字と数値を対応させる変換のルールです。

モールス信号を思い浮かべると分かりやすいでしょう。「A」を「・-」に置き換えるという表を、送る側も受ける側も持っていれば、メッセージは正しく届きます。でも受ける側が別の表で読めば、まったく違う文として解読されてしまいます。

文字化けは、まさにこれです。「UTF-8」や「Shift_JIS」は、それぞれ別の変換表です。UTF-8 で書かれたファイルを Shift_JIS の表で読めば、見たこともない記号が並びます。

エンコーディングは、読める形をそろえるための変換で、秘密を守るための暗号化とは目的が違います。表さえ分かれば誰でも元に戻せます。ハッシュや暗号化との違いはエンコード・ハッシュ・暗号化の違いで詳しく整理しています。

文字化けが起きやすい場面

取引先とのチャット
取引先

お送りいただいたCSV、Excelで開いたら日本語が全部記号でした。

Tatoediaの読者モブ
あなた

こちらのパソコンだと普通に読めるんですが……

どちらのパソコンも壊れてはいません。書いた側と読んだ側で、変換表が違っているだけ。

場面起きていること合わせ方
CSV を Excel で開いたら日本語が化けたファイルは UTF-8、Excel が別の表で読んでいる保存時と読み込み時の表をそろえる
Webページの日本語が化けたブラウザに「この表で書いた」と伝わっていないHTML の先頭近くに <meta charset="UTF-8"> を書く
API でやり取りした文字が化けた送る側と受ける側で表が違う使う表を事前に決めて統一する
URL に %E3%81%82 のような文字列が並ぶ日本語を URL で使える形に置き換えている(パーセントエンコーディング)化けているのではなく、正しい変換

新しく作るシステムやWebサイトなら、基本は UTF-8 一択です。古いシステムと連携するときは、Shift_JIS などへの変換が必要になることがあります。

「UTF-8 で書いたはずなのに化ける」という相談の多くは、ファイル自体の表と、ブラウザやシステムに伝えている表がずれているケースです。書いただけでなく、正しく伝わっているかまで確かめてください。

ちなみに、現場では「文字コード」という言葉もほぼ同じ意味で使われます。厳密には、文字と番号の対応表を文字コード、その変換の方法をエンコーディングと分ける整理もあります。