web拍手改造

文字化け要因を解消する その2

 前回、web拍手の文字化け要因を解消するという改造をおこなったが、その際にやり方がふたつあるといっていた。

 では、文字化けを解消するにはどうすればいいのか。解はふたつある。ひとつはHTTPヘッダ内で文字コードを指定してやること。もうひとつは、先ほど例示したmeta要素をhead要素内に書き加えてやること。

 前回の改造は後者、meta要素をhead要素内に書き加えるという方法をとったが、HTTPヘッダを修正するという手段も残されている。実はこちらの方が変更箇所が少なくて楽なのだが、前回はあえてこちらは紹介しなかった。

 なので、今回はこちらをやってみようと思う。

CGIを改造する

 今回修正するファイルは、前回同様clapinit.cgiである。無改造のclapinit.cgiだと71行目が修正個所である。

print "Content-type: text/html\n\n";

 勘のいい人ならピンとくるのではないだろうか。ここに出てくるContent-typeという文言は、前回の改造で用いたmeta要素のhttp-equiv属性の値である。そしてtext/htmlという文言はcontent属性値に現れていた。

 HTTPヘッダというのは、サーバがブラウザからのリクエストに答えて、ファイルを送りだす時にファイルの先頭につけて返すメッセージだ。Content-typetext/htmlとあると、ブラウザはこれから送り出されるファイルがhtml文書であると判断する約束になっている。

 このContent-typeヘッダにはcharsetというオプションパラメータがあって、それを用いることで明示的にファイルの文字コードを指定することができる。つまりだ、今回はこのContent-typeヘッダにcharsetをパラメータを付け加えようというわけだ。

 clapinit.cgiを次のように書き換えるとよい。

print "Content-type: text/html; charset=Shift_JIS\n\n";

 これでブラウザは、clap.cgiを呼び出して得られるデータがShift JISで書かれたhtml文書であると判断してくれる。

他の文字コードの場合

 CGIファイルがShift JIS以外の文字コードで書かれている場合は、以下の例で強調した部分を、それぞれの文字コードにあわせて書き換える。要領は前回とおんなじだ。

Shift JISの場合
print "Content-type: text/html; charset=Shift_JIS\n\n";
EUC-JPの場合
print "Content-type: text/html; charset=EUC-JP\n\n";
JISの場合
print "Content-type: text/html; charset=iso-2022-jp\n\n";
ユニコード(utf-8)の場合
print "Content-type: text/html; charset=utf-8\n\n";

 いろいろな文字コードの場合とかいって紹介してはいるものの、私はweb拍手CGIをShift JISとUTF-8でしか動かしたことがない。なのでEUC-JPやJISの場合はどうなるのか実はよくわからない。実際ちゃんと動くのかな。


<   >

わたしの愛した機械へ トップページに戻る

公開日:2005.08.08
最終更新日:2005.08.30
webmaster@kototone.jp
Creative Commons License
こととねは、クリエイティブ・コモンズ・ライセンス(表示 - 継承 2.1 日本)の下でライセンスされています。