Google日本語入力なんかを使っていると機種依存文字なんかも候補に出てきてしまいますよね。
それを、UTF-8ならまだしも、shift_jisとかcp932(Windowsの日本語拡張エンコーディング)なんかに変換しようとすると、エラーを吐いて終了するわけです。
UTF-8にエンコードしてファイルに出力
#!/usr/bin/env python # -*- coding:utf-8 -*- f = open("file.txt", "w") kishu_izon = u"機種♫依存✓文字が⊿含まれています" f.write(kishu_izon.encode('utf-8')) f.close()
file.txt
機種♫依存✓文字が⊿含まれています問題なく出力
cp932で出力
#!/usr/bin/env python # -*- coding:utf-8 -*- f = open("file.txt", "w") kishu_izon = u"機種♫依存✓文字が⊿含まれています" f.write(kishu_izon.encode('cp932')) f.close()
UnicodeEncodeErrorで終了。
Traceback (most recent call last): File "test.py", line 6, in♫がエンコード出来なかったみたいですね。f.write(kishu_izon.encode('cp932')) UnicodeEncodeError: 'cp932' codec can't encode character u'\u266b' in position 2: illegal multibyte sequence
こういう時は、エラーを返す文字を無視するか、他の文字(?等)に置き換えて出力すればOK。
encodeの2引数目に'ignore'を指定。
#!/usr/bin/env python # -*- coding:utf-8 -*- f = open("file.txt", "w") kishu_izon = u"機種♫依存✓文字が⊿含まれています" f.write(kishu_izon.encode('cp932','ignore')) f.close()
file.txt
機種依存文字が⊿含まれています変換できなかった文字は無視して出力されます。
encodeの2引数目に'replace'を指定。
#!/usr/bin/env python # -*- coding:utf-8 -*- f = open("file.txt", "w") kishu_izon = u"機種♫依存✓文字が⊿含まれています" f.write(kishu_izon.encode('cp932','replace')) f.close()
file.txt
機種?依存?文字が⊿含まれています変換できなかった文字は?に変換されます。
正直言うと、WindowsのExcelがcsvファイルはshift-jisじゃないと開けないとかいう困ったちゃんなのがいけないのです。
問題が一つ解決しました。ありがとうございます。
返信削除