はじめに
Windowsで日本語を含むパスを処理しているときにエラーが発生した。
文字コードはShift-JISを指定しているハズなのに、UnicodeDecodeErrorが発生。
WindowsってShift-JISじゃなかったのか?
対応方法
調べてみると、「WindowsはShift-JISを拡張したCP932」だとのこと。
なので、文字コードをCP932に指定したらすんなり動いた。
サンプルコード
cp932_test.py
# -*- coding: utf-8 -*-
s = '①②③④' # Shift-JISにはなく、CP932にある文字
su = unicode(s, 'utf-8')
print su.encode('cp932')
print su.encode('shift-jis') # UnicodeEncodeErrorになる
おわりに
WindowsのShift-JISは「CP932」ということを認識しましょう。
でないと、ドハマりしてしまいます。