文字コードについて

PHPので作ったページを表示してみると、文字化けを起こしていた。
これは、Windows上で作成したPHPプログラム(HTML)をFTPで転送したからである。
ブラウザの設定で、エンコードをEUCに設定すると見出しが、SJISに設定 するとテーブルの内容が文字化けを起こす。
何故こうなるかというと、

PostgreSQLデータベースに格納されている日本語データはEUCを使うのが一般的

だからである。

通常、Windowsでは日本語データにはSJISを使っている。だから、作成したHTMLはSJISで書かれて いるが、PGSQLから取り出したデータはEUCで書かれているため、文字化けが出てしまうのだ。

文字コードがらみのトラブルは、単純な文字化けですむとは限らない。一見正常に動いているように 見えて、実は全く正しくない動きをすることもあり、原因の究明が非常に困難である。
こういったトラブルの一番簡単な予防策は

全てのHTML、PHPスクリプトをEUCコードで記述する

である。EUCで記述を行うには、EUCに対応したエディタを使用するか、SJISで記述した ファイルをFTPで転送してから、サーバ側で文字コード変換ツール(qkc、nkf、ackなど)を 使ってSJISからEUCに変換するしかない。

どちらの方法を採用するかだが、サーバ側で文字コード変換ツールを使う場合、ページを更新 して転送するたびにサーバにログインして更新したファイルを変換しなければならない。
それを考えると、EUC対応のエディタで作成したほうが楽なのではないか?と私は思う。

VectorでEUC変換ができるエディタを探してみたところ、HmEdit 0.20というFreeの HTMLエディタがあった。早速ダウンロードして使ってみたが、まあまあ使いやすいかな? って感じでしょうか。唯一気に入らないのが「名前を付けて保存」を選ぶと 「*.htm、*.html、*.txt」以外の拡張子に指定できないこと。PHPスクリプトは拡張子を 「.php3」に指定するので、とても不便である。ファイルを開くときには「*.*」があるのに何故?

EUCで記述したHTMLやPHPスクリプトは、きちんと文字コードの宣言をして、EUCで記述している ことをブラウザに教えることにより、トラブルを回避しましょう。<HEAD>セクション内に <META>タグを使って次のように記述することで、ブラウザは文字コードを判断できる。

<HEAD>
<TITLE>METAタグでEUCを宣言する</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=x-euc-jp">
</HEAD>

以上の操作を行い、文字化けを直した。

最近気がついたのだが、普通のFTPソフトにはファイルを転送する時にSJISからEUCへ変換したり、 その逆を行う機能がついている。この機能を使えばサーバ側で変換したり、わざわざEUCコード 対応のエディタを使わなくてもいいですね。気が付かなかった・・・