1. ホーム
  2. python

Python read/write file Chinese mess Error TypeError: write() argument must be str, not bytes+.

2022-02-18 22:56:14
<パス

今日はPythonを使って、以下のようなコードで中国語のちんぷんかんぷんな文章をファイルに書き込んでみました。

fo = open("temp.txt", "w+")
str = 'Chinese'
fo.write(str)
fo.close()

その後、書き込んだ文字列のエンコード形式を UTF-8 と指定すると、TypeError: write() の引数は bytes ではなく str でなければならない、というエラーが発生します。

fo = open("temp.txt", "w+")
str = 'Chinese'
str = str.encode('utf-8')
fo.write(str)
fo.close()

Webで検索したところ、ファイルの開き方に問題があることがわかったので、以前のopen文をバイナリで開くように変更したところ、うまくいきました

fo = open("temp.txt", "wb+")

全コードは以下の通りです。

fo = open("temp.txt", "wb+")
str = 'Chinese'
str = str.encode('utf-8')
fo.write(str)
fo.close()

と中国語が文字化けすることはありません
この問題の原因は、pickleの保存方法がデフォルトでバイナリであることです