先に最終的に今回私が採用した解決方法を書いておこう。 私が採用した解決方法は,Perl スクリプトの先頭付近に
use utf8; # use utf8 in Perl use open ':encoding(UTF-8)'; # input/output default encoding is UTF-8 use open ':std'; # STDIN, STDOUT, STDERR is set equal to "use open ':encoding(UTF-8)';"という記述を書き,cgi の form でやりとりした文字列に対しては,
$input_string = Encode::decode('utf8', $input_string);のようにして,文字列のエンコーディングを変換する,という作戦である。
1. システム構成
まず,今回の件の動作環境について書いておこう。
私は,個人的なサイトのために FreeBSD でサーバーを運用している。 サーバーと言っても,マシン自体はちょっと古くなった Windows の Note PC を格下げして使っているのだが…。 サーバー上では,現在 FreeBSD release 9.0 を動かしている。 その上で,apache 2.2 で web site を立ち上げている。 web site は,主に cgi を使って運用している。 cgi を使うには Perl が必要なのだが,FreeBSD では「当然」Perl は最初から入っている。 現在の Perl のバージョンは,5.18 にしている。 さらに,データの管理のためにデータベースを運用している。 データベース用のアプリケーションは PostgreSQL 9.2.7 を運用している(今回の件で 9.3.3 にあげたが…)。