何かを書き留める何か

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

『Effective Python 2nd ed.』項目3:bytesとstrの違いを知ろう

Unicodeだがunicodeはない

Effective Python 2nd ed.』の続き

effectivepython.com

実質的に初版のItem 3の続投であるが、初版はPython 2の文字列であるstrunicodePython 3のbytesstrの違いを含めて説明があったが、 2版ではPython 3向けの説明に特化して更新された。 単純にPython 2向けの説明を削ったのではなく、システムのエンコーディングに関する注意が追加されている。

自分の手元のPC(Windows 10)の環境でエンコーディングを調べてみた。

> python -c "import locale; print(locale.getpreferredencoding())"
cp932

日本語圏のWindows OSのPCなのでcp932であった。

localeのドキュメントを読んで、getdefaultlocale()も試してみた。

>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> locale.getdefaultlocale()
('ja_JP', 'cp932')

業務でも、お客さんの環境はWindowsExcelCSVファイル開くというシチュエーションは(日本だと)頻出どころか必ず遭遇する問題である。 しかもcp932にあってShift_JISにはない文字を使われるなど日常茶飯事である。 必ずしもUTF-8エンコーディングではないという現実を受け入れつつ、『Effective Python 2nd ed.』に書かれているアドバイスを実行していこう。