ちょっと訳あって、sjisのwebアプリを作ってます。DBはPostgres(EUC_JP), 言語はPerl (SJIS)、HTMLもSJIS。
Postgresもsjisネイティブにしたかったけど、eucかutf8しかサーバ側のエンコーディングは対応していないので、クライアントエンコーディングをsjisにして対応。具体的には、DB connectの前に、
$ENV{PGCLIENTENCODING} = "SJIS";
とするだけ。
結構SJISではまってしまった。ソースにエラーメッセージとか書いてたけど、カタカナの「ソ」とかが特殊文字として扱われて実行エラーが出た。
それ以外に、CGIモジュールのescapeHTMLでタグエスケープしてたんだけど、これでもはまった。。。基本的には問題ないけど、「菊」とか「技」とか、sjisの1バイト目が8Bで始まる文字が化ける。しょうがないので、タグエスケープの関数を自作。これで回避できた。
文字コード問題はややこしい。出来れば避けて通りたい。
sub deltag { $_[0] =~ s/&/&/g; $_[0] =~ s/\'/"/g; $_[0] =~ s/\"/'/g; $_[0] =~ s/</</g; $_[0] =~ s/>/>/g; return $_[0]; }