2021年に、CGIの文字コードのお話を(Shift-JISのCGIが文字化け)
「すいません、今って西暦何年ですか?!」
2005年くらいからタイムスリップしてきたわたしは
「Shift-JIS 文字化け サーバー側」
「CGI Shift-JISのページが文字化け」
「AWS CGI 文字化け エンコード」
「CGI Content-Type Shift-JIS 文字化け」
このようなキーワードでGoogle検索をしまくりました。
状況を説明しますと、とある古いウェブシステムがありまして、古いがゆえにShift-JISのCGIで、出力されるhtmlもShift-JISのページになっていました。本番環境ではきちんと表示されるのですが、テスト環境で出力ページが文字化けしてしまうという状態でした。
具体的には、きちんとCGIは動作して、ウェブページがShift-JISで出力されているのですが、ブラウザがエンコードをUTF-8で解釈して文字化けしてしまいます。ブラウザでテキストエンコーディングをShift-JISに読み直してあげれば文字化けせず表示できます。htmlソース上の「Content-Type」はShift-JIS指定されています。
.htaccessで解決しました
いろいろ試行錯誤した結果、.htaccessファイルに以下を記述することで文字化けが解消できました。
AddDefaultCharset shift_jis
Apache2.0は、METAタグで「charset=」指定をしていても、標準設定でISO-8859-1(ラテン系欧州語、フランス語、ドイツ語)文字セットを補うそうです。なのでhttpd.confの「AddDefaultCharset」をShift-JIS指定するか、ディレクトリに対して.htaccessを設置して「AddDefaultCharset shift_jis」を指定すれば解決です。
問題が解決したわたしは無事2005年の世界へ戻っていきました。