問題
Pythonでテキストファイルを読み込むために以下のコードを実行した.
readtext.py
f = open('test.txt','r',encoding='utf-8')
line = f.readline()
print(line)
そしたら,UnicodeEncodeDecodeErrorが出ました.
UnicodeEncodeDecodeError
"'cp932' codec can't encode character '\ufeff' ..."
解決したのでメモしておきます.
諸条件
OS: Windows10 Pro
IDE: PyCharm Community 2019.1
Env: Anaconda3
その他:テキストファイルはWindowsのエディタで作成
原因
\ufeffはUTF-8テキストの開始を表す文字列だそうで,cp932(Windowsの標準入出力文字コード)にはないので,エンコーダーが困ってしまっちゃったようです.よしよし.
ちなみにこのエンコーダーは,unicode文字列をwindowsに書き出したりするときに自動でcp932に変換してくれるらしいです.親切が裏目にでちゃったんだね.よしよし.
解決策
ファイルを開く時に,\ufeff付きのUTF-8テキストであることを教えてあげるとうまくいきました.ちなみに\ufeff付きのファイルをBOMありUTF-8っていうらしいです.
readtext2.py
f = open('text.txt','r',encoding='utf-u-sig') # BOMありUTF-8
line = f.readline()
print(line)
めでたしめでたし.
その他
以下の情報のおかげで無事に問題を解決することができました.どうもありがとうございます.