本文へ目次へ
トップページドキュメント ≫ RedHat 9でPerlのスクリプトエラー

RedHat 9でPerlのスクリプトエラー

RedHat Linux 9 でPerlのスクリプトを動かすと、「Malformed UTF-8 character ....」 というエラーメッセージが表示されて動かないことがあります。

自分でインストールした場合だとあまり起きない状況だと思いますが、他人がインストールしたサーバーのメンテナンスや、 すでにインストールされているレンタルサーバーを借りた場合などに原因がわからず苦労することがあります。 その際、もしインストールされているPerlのバージョンが5.8.0であれば、ほぼ確実にローケルの問題です。

Perl 5.8.0から仕様の変更が行われ、ロケールに en_US.UTF-8 が指定されているばあい、 自動的に STDIN、STDOUTがUTF-8と見なされてしまうようになりました。 そのため、EUC-JPなどで記述されているファイルを読み込むと、正しくない文字がある、というエラーが出てしまいます。

この仕様変更、かなりの人々を悩ませた様で、Perl 5.8.1では撤回されています。 ですが、RedHat Linux 9をデフォルトでインストールすると、Perl 5.8.0 なうえ、ローケルまで en_US.UTF-8 に設定してくれます。

解決方法はPerlのバージョンアップが良いと思いますが、rpmの依存関係や、その他のしがらみで簡単にバージョンアップできない場合も多々あります。 そういった場合は、ローケルの方を設定し直しましょう。RedHat Linuxのローケル設定は、「/etc/sysconfig/i18n」にあります。 そこのLANG設定を「ja_JP.eucJP」に修正し、変更を適用します。

なお、変更には管理者権限が必要なので、権限のない場合は管理者にお願いするしかありません。