日本語文字の扱い(windows向けには Shift_JISでなくcp932で扱う)
(一番左の半角チルダはどこでも同じように見えると思いますが、)表示環境によっては真ん中と、一番右の波ダッシュが同じように見えるかもしれませんが、真ん中と、右の波ダッシュは異なります。
その証拠に、pythonでsを表示させると違う文字コード(\u301cと、\uff5e)として見えます。
>>> s = u"~〜〜" >>> s u'~\u301c\uff5e'
これをshift_jisでエンコードすると、エンコードに失敗します。
>>> s.encode("shift_jis") Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'shift_jis' codec can't encode character u'\uff5e' in position 2: illegal multibyte sequence
一方で、cp932(マイクロソフト向け拡張ShiftJIS)でエンコードするとうまく行きます。(windowsでは両者を区別せず表示)
>>> s.encode("cp932") '~\x81`\x81`'
補足情報:
なお、「−」もutf-8からshift_jisに変換すると例外飛びますが、これは「-」(半角ハイフン)に変換されました。
参考:
[Python] Pythonで日本語shift_jis扱うときは「cp932」とした方がいいらしい
http://www.ehaco.net/2010/11/tips-python-japanese-charset
Microsoftコードページ932
http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932
Unicodeに関連する問題
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5#Unicode.E3.81.AB.E9.96.A2.E9.80.A3.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C