Pythonでの文字列
Pythonでは文字列にstr型とbyte型があります。この違いを知っておかないと下記のようなエラーに遭遇することになるので、ひらがなや漢字などの文字列を扱う場合は注意が必要です。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
str型
Unicodeで扱われる文字列です。>>> print(type("piyopiyo"))
<class 'str'>
byte型に変換したいときはencode()を使います。>>> print("puyopiyo".encode("UTF-8"))
b'puyopiyo'
>>> print(type("puyopiyo".encode("UTF-8")))
<class 'bytes'>
byte型
ASCIIで扱われる文字列です。文字列の前にbを付けるとbyte型になります。
>>> print(type(b"piyopiyo"))
<class 'bytes'>
str型に変換したいときはdecode()を使います。>>> print(b"piyopiyo".decode("UTF-8"))
piyopiyo
>>> print(type(b"piyopiyo".decode("UTF-8")))
<class 'str'>
ファイル操作時
下記に注意をする必要があります。- ファイルを読込時はbyte型をstr型に変換する
- ファイル書込時はstr型をbyte型に変換する
まとめ
文字列を結合するときに、str型とbyte型が混同しているとUnicodeEncodeErrorになるので、エラーメッセージ等の実装には注意が必要です。必ず文字コードを意識した実装をしましょう。