Python2にはstr
とunicode
の2つの文字列型がある。
普通はunicode
型を使うべき。
str型
str
は文字列と言うよりバイト列という方が正しい(と思う)。
aiueo = 'あいうえお'
# この時 aiueo は str 型になる
len(aiueo)
# いくつになるかは、ファイルのエンコーディングによって変わる
# 例えば、utf-8だと15になり、shift_jisだと10になる。
unicode型
unicode
型は文字をUCS-2(またはUCS-4)として記録している。
UCS-4の範囲の文字をつかうにはPythonのコンパイル時に指定する必要がある。
aiueo = u'あいうえお'
# この時 aiueo はunicode型になる
len(aiueo)
# どの環境でも5になる
encode と decode
str
型のdecode
メソッドを呼び出すとunicode
型に変換できる。
逆にunicode
型のencode
メソッドを呼び出すとstr
型に変換できる。
aiueo = u'あいうえお'
aiueo_utf8 = aiueo.encode('utf-8')
aiueo_shiftjis = aiueo.encode('shift_jis')
print isinstance(aiueo_utf8, str) # True
print isinstance(aiueo_shiftjis, str) # True
print len(aiueo_utf8) # 15
print len(aiueo_shiftjis) # 10
print len(aiueo_utf8.decode('utf-8')) # 5
print len(aiueo_shiftjis.decode('shift_jis')) # 5
decode
メソッドに正しくないエンコーディングを渡すとUnicodeDecodeError
エラー。
aiueo_shiftjis.decode('utf-8') # UnicodeDecodeErrorエラー
Python3
紛らわしいので、Python3ではstr
はbytes
に、unicode
はstr
に変わっているらしい。