日本語文字の扱い(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