見出し画像

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年の世界へ戻っていきました。

いいなと思ったら応援しよう!