pythonで日本語
webスクレイピングとかでどこからか日本語の文字列をもってくるといつもはまるので、自分用に
http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html
のメモ
・文字列の表現に用いられるのは
- str型
- unicode型
の二つ
・str型は、エンコード宣言で宣言した文字コードの文字列が格納される
→ ソースコードの文字コードとエンコード宣言が一致していれば変数への入出力は問題なく行える
・unicode型はエンコード宣言に関わらず「Unicode文字列を表現可能な、とある内部形式」で情報を格納
→ str型の多バイト文字列の場合、len()や正規表現はバイト単位で行われるため変な感じになることがあるけど、unicode型なら文字単位で行われるためいい感じになる
→ 「とある内部形式」なので出力時にどの文字コードで出力するか決めなきゃダメ
… unicode型 ↔ str型
・unicode型 → str型
u1.encode('utf-8') # ← unicode型からUTF-8のstr型へ
・unicode型 ← str型
s1.decode('utf-8') # ← str型をUTF-8の文字列として解釈してunicode型へ unicode(s1, 'utf-8') # 上とほぼ同じ
str型とunicode型の比較とか結合とかしようとすると、s1.decode('ascii')として両方をunicode型にして比較や結合をしようとする → s1がASCIIじゃないとUnicodeDecodeError
→ 文字列はできるだけunicode型で保持すること!