なぜ文字化けが発生するの?
主な文字コード
- Shift_JIS
- EUC-JP
- JIS(ISO-2022-JP)
- UTF-8

例えば、「あ」と言う文字はShift_JISでは16進数で「0x82a0」と表されます(この数字をコンピュータが読んで文字に変換します)。この16進数値が全く同じ数値であっても文字コードによって変換する文字が異なる場合があります。
サイト作成者が文字コードを明示しない場合は、ブラウザがこの16進数値の表れ方を解析して文字コードを自動的に判断します。しかし、異なる文字コード間でも、限られた文字コード領域を複数の文字コードが利用しているためにコードの重複があるために誤判断されることがあります。そういう場合に文字化けは発生します。
文字化けを防止するために
複数の文字コードを扱えるエディタを使うことをお勧めします。また、半角英数字だけで書かれたファイルをエディタで開くと、保存時の文字コードに関わらずShift_JISと判断されることが多いようです。コメント行などを使って日本語(2バイト文字)を入れておくほうがいいかもしれません。
文字コードを明示(宣言)してあげましょう。以下の方法があります。
HTTPヘッダで宣言
HTTPヘッダとは、HTTP(Hypertext Transfer Protocol)において、本文の送信に先立って送信される各種データです。PerlやPHPなどでページを出力している場合はHTTPヘッダで文字コードを指定できます。
- Perl
print "Content-type: text/html;charset=文字コード\n\n";
- PHP
header("Content-Type: text/html;charset=文字コード");
.htaccessで指定
AddType "text/html; charset=文字コード" html
拡張子「html」のファイルの文字コードを指定しています。
metaタグで指定
<meta http-equiv="Content-Type" content="text/html; charset=文字コード">
この記述はtitle要素より先に書くことをお勧めします。この記述より前にtitleタグがあると、ブラウザがそのtitleの中の文字から文字コードを判断してしまう場合があるからです。
ケアレスミスでの文字化けを防ぐために
上記の各指定とファイルの保存文字コードは同じものにしてください。
Geocitiesユーザが文字化けの質問をしているのをよく見かけますが、アドバンストHTMLエディタで作成されたファイルの文字コードがEUC-JPなのに対して
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
にしていたりするのが原因です。アドバンストHTMLエディタでHTMLを書いた場合は
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
としましょう。