何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Python』Item 3: bytes、str、unicodeの違いを理解しよう

『Effective Python』の続き。 更新が遅いのは訳してから感想を書くことにしているからであるが、別に翻訳を公開するわけじゃないから…と思いつつ。

Effective Python: 59 Specific Ways to Write Better Python (Effective Software Development Series)

Effective Python: 59 Specific Ways to Write Better Python (Effective Software Development Series)

www.effectivepython.com

Python 3のstrunicodePython 2のunicodestrはそれぞれ違います、という話。 上手いヘルパー函数を用意して対処したり組み込み函数openなどでバイナリファイルを開くときには'wb'とか'rb'つけましょう。

Python 2のunicodePython 3のstrUTF-8エンコーディング違うという話を聞かされて実験した結果は以下の通り。

>>> unicode("ほげ").encode("UTF-8") # Python 2
'\xc3\xa3\xc2\x81\xc2\xbb\xc3\xa3\xc2\x81\xc2\x92'

>>> str("ほげ").encode("UTF-8") # Python 3
b'\xe3\x81\xbb\xe3\x81\x92'

>>> b'\xc3\xa3\xc2\x81\xc2\xbb\xc3\xa3\xc2\x81\xc2\x92'.decode('UTF-8')
'\xe3\x81\xbb\xe3\x81\x92'

>>> b'\xe3\x81\xbb\xe3\x81\x92'.decode()
'ほげ'

これは怖い。 おぼろげながらPython 3への移行が遅れた理由がわかったような気がした。