私がPython3でUnicodeEncodeErrorなのはどう考えてもデフォルト文字コードが悪い!

python_logo

とまぁわかりにくいタイトルですね。
要は「よーしパパ、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章.文字列

2 Thoughts on “私がPython3でUnicodeEncodeErrorなのはどう考えてもデフォルト文字コードが悪い!

  1. kj on 2014/02/23 at 10:28 said:

    軟派なPython初学者です、大変参考になりました。
    自分の借りているサーバー上でようやく日本語を出力させる事ができました。
    ありがとうございました。

    • Knight on 2014/03/21 at 11:04 said:

      kjさん
      うぉぉっ!?チラ裏なサイトに書き込みが!
      大変遅ればせながら返信をば。
      お役に立てたようで無茶苦茶嬉しいですヾ(*´ー`)ノ
      Python楽しいですよね~♪

      見に来られる方もいらっしゃるようなので、
      もっとわかりやすく書けるようになろうと気合入りました!
      というかコメントぐらいチェックしろ自分と反省します il||li л○ il||li

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation