UnicodeEncodeError: 'cp932' codec can't encode character の対処
結論を先に。これはWindowsのPythonが、出力やファイル書き込みの文字コードを既定の cp932(Shift_JIS)で処理しようとし、そこに含められない文字(絵文字や一部の漢字など)があって失敗している状態です。書き込み時に encoding=“utf-8” を明示すれば直ります。
UnicodeEncodeError: 'cp932' codec can't encode character '\uXXXX' in position N: illegal multibyte sequence原因
Windowsでは、ファイルを開くときや print の出力先の既定エンコーディングが cp932 になりがちです。cp932 は日本語を扱えますが、絵文字や一部の記号・異体字は表現できません。その文字を書こうとした瞬間にこのエラーになります。
対処
- ファイルを開くときは encoding を必ず指定する。これが最も確実です。
with open("out.txt", "w", encoding="utf-8") as f: f.write(text)- print がコンソールで落ちる場合は、標準出力をUTF-8に切り替える。
import syssys.stdout.reconfigure(encoding="utf-8")- スクリプト全体をUTF-8で動かしたいなら、環境変数で既定を変える(Python 3.7以降のUTF-8モード)。
set PYTHONUTF8=1まとめ
- 原因は出力先の既定が cp932 で、絵文字などを表現できないこと
- open には encoding=“utf-8” を必ず付ける
- print が落ちるなら sys.stdout.reconfigure(encoding=“utf-8”)
- 恒久対応は PYTHONUTF8=1 でUTF-8モードにする