〜が?に。うむ、これはJavaでも通った道。UTF-8 <-> Windows-31Jで出るんだよね
Pythonではどうやって回避すれば良いのか調査中。いやまぁ変換前にまずそうな数値を書き換えるしかないんだけど。

① utf8からshift_jisに変換するとき => cp932でencodeする

perlの波ダッシュの文字コード変換のまとめ

Windows-31Jベースのテキスト・ファイルから読み込んだコンテンツを1文字ずつチェックし、U+FF5Eの「〜」を見つけたらU+301Cに置き換える

http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.html