とまぁわかりにくいタイトルですね。
要は「よーしパパ、Python3でCGIやっちゃうぞー」って意気込んだは良いけど
出力するソースに日本語を含んだ途端に
UnicodeEncodeError: ‘ascii’ codec can’t encode characters
なんて文字列に阻まれたりするんですよーってことです(´・ω・`)
(それ以前のパーミッション設定とか注意は サーバーでPythonを使うときに注意すること を参考に)
このエラーを理解するには、Python2.x系と違って
Unicodeとはなんぞやー?とかbyte列とはなんぞやー?とか色々知る必要があるらしい。
あと、Pythonはデフォルト設定をよく読みに行くらしいという特性も知らないと躓きそうです;
正直、僕みたいな文系プログラマーにはわかりにくかったです(ノд`)+゜。
で、結局注意点は
・Pythonのソースコードは基本的にUTF-8で書こうぜ
・一応2行目に # -*- coding: utf-8 -*- みたいにソースのエンコードを指定しようね
・ファイルやフォームからの入出力の際は、必ずエンコード指定しろよー
・レンタルサーバとかにUPしたら、デフォルトエンコードを参考にしちまうみたいだから
必要に応じて書き換えようぜー
って感じらしい(・ω・)
調べれば調べるほど訳のわからないことをして遠回りしたけど、
結局はこんな感じでデフォルトエンコーディングを書き換えることで日本語表示できましたー
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
ちなみにサーバのデフォルトエンコーディングが何かを調べるには
import sys print(sys.stdout.encoding) # ANSI_X3.4-1968 等を出力
のようにして調べると良いらしい。
とにかく文字コードだけで分厚い本になるぐらい難しい分野だと言われてることだけは
改めてよーくわかりました!(ノ∀`)
でもPythonプログラムを続けるためには、「わからないなりにでも前に進んでる実感がある!」
っていうのが大事だと思うんだ。それは文系プログラマーの大切なモチベーションだからね!
参考サイト
UnicodeEncodeError: に悩まされない。Python2.x から Python3.x への乗り換え
Dive Into Python 3 – 第4章.文字列