#事の始まり
この本のある章で、Python3を使ったcgiスクリプトを扱います。
せっかくなので研究室のラズパイ3上にWebサーバを建てて、本の通りPython3で書いたcgiスクリプトを動かすことにしてみました。
書籍の中ではPythonコードでhttpサーバを建てていたのですが、あえてApacheを使いたかったので、ちょっと違う方法で挑戦してみることに。
しかし、スクリプトを実行しても画面が真っ白のまま何も映らない。。。500エラーも返って来ませんでした。(ちなみにPyhon2で書いたコードは動く。。。)
#エラーログを見てみる
/var/log/apache2/error.log
......
[WWW MMM DD HH:MM:SS.SSSSSS YYYY] [cgi:error] [pid ****] [client 10.26.200.***:57137] AH01215: UnicodeEncodeError: 'ascii' codec can't encode characters in position 369-381: ordinal not in range(128)
どうやら文字エンコーディングの部分で怒られてるっぽい。
デフォルトでutf-8使うんじゃないのか?と思いつつ、とりあえずshebang行にutf-8宣言を追加しました。
test.py
# !/usr/bin/python3
# -*- coding: utf-8 -*-
.......
が、現状は変わらず。
#解決法
Apache2のコンフィグに、以下の一行を追加すると動きました。
どうやらPython2系と3系で、エンコードする文字コードの設定を読む場所が違うらしいです。
/etc/apache2/apache2.conf
......
<Directory /var/www/>
......
SetEnv PYTHONIOENCODING utf-8
......
</Directory>
......