SHIFT-JISで一部の漢字が文字化けしてCGIが動かない問題が発生しました。
他の人が作ったperlのCGIを使ってサイトを作成していたのですが、特定のページでInternal Server Errorが発生しました。この場合、ファイルのパーミッションがおかしいのが原因ということはよくあるのですが、一括してパーミッションを変更していたので問題はありませんでした。
サーバーのエラーログを確認すると何やら文字コードの問題のようです。問題が発生している行数とカラムが表示されていましたので原因の個所を確認しました。
[Sun Dec 31 14:52:58.320053 2017] [cgi:error] [pid 62413] [client 182.236.38.11:0] AH01215: Unrecognized character \\x92; marked by <-- HERE after ','\x90^\x90\\','<-- HERE near column 229 at maruchan.cgi line 24.: [Sun Dec 31 14:52:58.320178 2017] [cgi:error] [pid 62413] [client 182.236.38.11:0] End of script output before headers: maruchan.cgi
文字を消しながら確認すると原因は少し前にある「申」という漢字でした。調べてみるとSHIFT-JISで以下の漢字は文字化けが起こるそうです。「申」入ってますねぇ。
「―」,「ソ」,「噂」,「欺」,「圭」,「構」,「蚕」,「十」,「申」,「貼」,「能」,「表」,「暴」,「予」,「禄」,「兔」
普通に使う漢字ばかりなので文字コードをUnicodeに変えてしまいたいところですが、他人の作ったプログラムであるため我慢して別の対応方法を探ることにします。
これらの文字コードは2バイト目が「5C」になっています。ということは「\」(バックスラッシュ、円マーク)ですね。
結局、「申\」とすることで解決しました。
コメント