私は動的ページを作る際Perlを使用している。
6年ほど前にPHPも少しかじってみたが、当時はPHP未実装のホスティングサーバーも珍しくなく『やっぱりPerlか?Perlだけってのはあるけど、PHPだけってのはないだろう』というわけで今に至っている。
さて今回は文字コードの話だ。
ウェブサイトを作る際使われる文字コードは、シフトJIS、EUC、UTF8等がある。
Windwos、Mac等OSもUnicode対応してきていてUTF8も問題無いのは承知しているのだが、私の利用しているホスティングサービスはデータベースがEUCだったので、文字化けを回避する為にEUCにしている。
特にショッピングサイト等の場合クライアントが文字入力を行うので納品時だけ文字化けが無ければという事では済まない。
このまま『UTF8がウェブサイトではデファクトスタンダード!』なんて事になるまで変えないんだろうと思っていたのだが、違う理由で変更する事になった。
利用しているホスティングサーバーが仕様変更の為にデータベースが今度はUTF8固定になってしまったのだ。(デファクトスタンダードになりつつあるのかもしれないが)
こうなると前述の理由からUTF8に変えた方が良い。因にPerlも5.8以降は完全対応になっているらしいし、詳しくは分からないが、内部の処理はUTF8らしい。なおさら変更がベターだ。
早速、自前ビジネス用に制作中のファイルをUTF8に変更してみた。
静的ページは全く問題無い、HTMLの最初の方で宣言している文字コードをEUC-JPからUTF-8にすれば良いだけだ。
Perlプログラムもテキストエディター上で出力するHTML文字コード宣言をUTF-8に変更、CGIヘッダーの宣言も変更して、ファイル自体もUTF-8に変更。
幸い私が利用しているエディターは、良く目に付く所にテキストエンコーディングのプルダウンメニューが設置してあって、いつでも変更可能だ。
とりあえず動かしてみる、・・・エラー。
「!?」、文字コードを確認してみる、問題無い。
ログを見てみるとヒアドキュメント内の『@(アットマーク)』のところが問題のようだ。
配列として使っていないので当然『¥(円マーク)』でエスケープしている。
何度か試してもどうもこの箇所らしい。
ググったりして調べてみてもそれらしい情報が無い、困った進まない。
仕方なくHTMLはUTF-8で、PerlはEUC-JPで、データベースはUTF-8という道を考えて、Perlのファイルをいじってみる・・・わけ分からん!
やっぱり今後の事を考えてみてもPerlをUTF-8にする方が良い、何とか@の謎をとかねば!!・・・そういえば円マークってOSによっては『\(バックスラッシュ)』だよなと気づきタイピング、Macではバックスラッシュは[ Option ]+[¥ ]だ、うっ打てない?!『ヌ(半角ヌ)』と表示される。
・・・暫く放置、現実逃避、別の仕事をしておこう!・・・あっ!一段落した所だった・・・。
家にあるPerlの本は古いものばかりだし、本屋にでも行ってみるか。
・・・立ち読み・・・空振りばかり。
Perl自体成熟している言語なので新しい本もあまり出ていないようである。
帰宅・・・ボーッとしてみる・・・・やっぱりバックスラッシュが試してみたい、何とかならんか。
ただ、他の例えばブラウザ上では打てるのだ。
ひょっとしてテキストエディターの問題か?
テキストエディター=超単純なワープロみたいなもん的な理解だったのし、さらに私の使っているのはMacで定番のテキストエディターなので気にしていなかった。
念のために使用しているテキストエディターのウェブサイトを見てみる。
私の使っているのは一つ前のバージョンだった、しかも最新版は8ヶ月ほど前にリリースされていた。
『とりあえず入れてみよう、変更点は、何々・・・Unicodeネイティブ対応!!』
早速試してみる。
バックスラッシュ打てた!!、エラー出んかった、解決。
間接的な原因は使っていたテキストエディターのUnicode対応が不完全だったって事なのかもしれないが、直接の原因は私の怠慢である。
なにわともあれ、これで仕事が進むのであるが、Unicodeの対応が不完全なエディターでもなんとかなったんだろうか?
試してみたがやっぱりどうにもならない気がする、筆を選ぶとか言う問題じゃない気もするが、弘法じゃないので筆は選ぶという事で。
参考までにWikipediaのUnicodeのページに日本語環境でのUnicodeの諸問題としてYEN SIGN問題が紹介されている(ページ中程)
コメント