UnicodeEncodeError: 'cp932' codec can't encode character '\U0001f363' in position 5: illegal multibyte sequence は、cp932(Windows の日本語の文字コード)で表せない文字を、cp932 で書き出そうとしたときのエラーです。 絵文字・𠮷(つちよし)・é などが原因になります。

エラー文の '\U0001f363' が、書けなかった文字です。print('\U0001f363') で表示すると、どの文字か分かります(この例は 🍣)。

どこで出たか 直し方
print(出力をファイルにリダイレクト・タスクスケジューラ・一部の IDE) PYTHONUTF8=1 で UTF-8 にする、または sys.stdout.reconfigure(...)
open(..., 'w') でファイルに書く encoding='utf-8' を指定する
df.to_csv(..., encoding='cp932')(Excel 向けの CSV) encoding='utf-8-sig' にする
どうしても cp932 で書く(取引先の指定など) errors='replace' など。書けない文字が ? になることを決めて使う

確認環境:Python 3.11・pandas 3.0。Windows の cp932 の出力は、PYTHONIOENCODING=cp932 と encoding='cp932' の指定で再現しました(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「UnicodeEncodeError: 'cp932'の直し方|Python」

cp932 で書けない文字

確認環境で、文字ごとに cp932 と shift_jis で書けるかを試しました。

文字 例 cp932 shift_jis
絵文字 🍣(U+1F363) 書けない 書けない
JIS 第3・第4水準の漢字 𠮷(U+20BB7) 書けない 書けない
アクセント付きの文字 é(U+00E9) 書けない 書けない
ダッシュ —(U+2014) 書けない 書けない
ノーブレークスペース U+00A0 書けない 書けない
Windows の拡張文字 ①・髙・~(U+FF5E)・-(U+FF0D) 書ける 書けない
半角カナ カ 書ける 書ける

encoding='shift_jis' を指定すると、① や 髙(はしごだか)も書けません。 Windows の日本語の文字(丸数字・はしごだかなど)を含むデータは、shift_jis ではなく cp932 を指定します。それでも、絵文字や 𠮷 は書けません。

書けても、別の文字に変わるものがある

書いた文字 cp932 で保存して読み直した文字
〜(U+301C 波ダッシュ) ~(U+FF5E 全角チルダ)
−(U+2212 マイナス記号) -(U+FF0D 全角ハイフンマイナス)
‖(U+2016) ∥(U+2225)
¢・£・¬ ¢・£・¬(全角)

エラーにはならず、読み直すと別の文字(見た目は似ている)になりました。 読み直した文字列で検索・比較すると一致しなくなります。この問題の詳細は、関連記事の「「~」が「?」になる原因と直し方|波ダッシュ問題」で扱っています。

print で出るとき

(標準出力が cp932 のとき)
>>> print('合計 🍣 100円')
UnicodeEncodeError: 'cp932' codec can't encode character '\U0001f363' in position 3: illegal multibyte sequence

Python 3.6 以降の Windows では、コンソールに直接表示するときは Unicode の API が使われ、このエラーは起きにくくなりました。ただし、出力をファイルにリダイレクトしたとき(python app.py > log.txt)は、以前の文字コードのままです(PEP 528)。タスクスケジューラや、一部の IDE・CI での実行も、リダイレクトに当たることがあります。

直し方 書き方 結果(確認環境)
UTF-8 モードにする 環境変数 PYTHONUTF8=1、または python -X utf8 app.py 標準出力が utf-8 になった
書けない文字を置き換える PYTHONIOENCODING=cp932:replace 合計 ? 100円
プログラムの中で変える sys.stdout.reconfigure(errors='backslashreplace') 合計 \U0001f363

PYTHONUTF8=1 は、print・open など Python 全体の既定の文字コードを UTF-8 にします。 ログを UTF-8 で読めるなら、これが一番手軽です。

open でファイルに書くとき

with open('out.txt', 'w') as f:      # encoding を書いていない
    f.write('髙橋 𠮷野家\n')

encoding を書かないと、UTF-8 モードでない限り、OS の文字コード(日本語の Windows なら cp932)が使われます(Python の公式ドキュメント)。同じコードが、Mac・Linux では動き、Windows だけで止まります。

UnicodeEncodeError: 'cp932' codec can't encode character '\U00020bb7' in position 3: illegal multibyte sequence

確認環境では、エラーになったファイルは 0 バイトでした(1行目の途中で止まったため、何も書かれなかった)。途中まで書けたように見えて、実は空、ということがあります。

with open('out.txt', 'w', encoding='utf-8') as f:     # 必ず encoding を書く
    f.write('髙橋 𠮷野家\n')

Python 3.15 では、encoding を書かないときの既定が UTF-8 に変わりました(PEP 686、公式ドキュメント)。それより前の版で動かす可能性があるなら、encoding='utf-8' を明示しておきます。

pandas の to_csv(Excel で開く CSV)

>>> df.to_csv('p.csv', encoding='cp932', index=False)
UnicodeEncodeError: 'cp932' codec can't encode character '\U00020bb7' in position 0: illegal multibyte sequence

「Excel で文字化けしないように cp932 で書く」と、𠮷 などで止まります。 Excel で開く CSV は、utf-8-sig(BOM 付きの UTF-8)で書くと、文字を失わずに済みます。

書き方 結果(確認環境)
encoding='utf-8-sig' すべての文字を保存。先頭に BOM(EF BB BF)が付く
encoding='cp932' 𠮷 でエラー
encoding='cp932', errors='replace' 髙橋,① は残り、𠮷田 は ?田、— は ?

errors='replace' は、エラーにはなりませんが、氏名の一部が ? に変わります。 取引先のシステムが cp932 しか読めない場合など、どうしても cp932 で渡すときだけ使い、どの行の何が置き換わったかを記録しておきます。

errors の種類と結果

'佐藤 様 🍣 注文' を cp932 で書いたときの結果です。

errors 結果
'strict'(既定) UnicodeEncodeError
'replace' 佐藤 様 ? 注文
'ignore' 佐藤 様 注文(黙って消える)
'xmlcharrefreplace' 佐藤 様 🍣 注文(HTML なら元の文字で表示される)
'backslashreplace' 佐藤 様 \U0001f363 注文
'namereplace' 佐藤 様 \N{SUSHI} 注文

'ignore' は文字が消えたことに気づけないので、データの書き出しでは避けます。 ログなら 'backslashreplace' にすると、どの文字だったかを後で確かめられます。

書けない文字を、先に探す

def cp932_ng(text):
    return [(i, ch, f'U+{ord(ch):04X}') for i, ch in enumerate(text)
            if not _can(ch)]

def _can(ch):
    try:
        ch.encode('cp932'); return True
    except UnicodeEncodeError:
        return False

cp932_ng('𠮷田 🍣 é')   # [(0, '𠮷', 'U+20BB7'), (3, '🍣', 'U+1F363'), (5, 'é', 'U+00E9')]

cp932 で渡す必要があるデータは、書き出す前に、書けない文字がある行を一覧にします。 置き換えるか、相手と相談するかを、行ごとに決められます。

確認の手順(チェックリスト)

順番 確認すること 方法
1 どの文字か エラー文の '\U...' を print
2 どこで書いているか print・open・to_csv・ログ
3 UTF-8 にできるか encoding='utf-8'、Excel 向けは utf-8-sig、PYTHONUTF8=1
4 cp932 が必須か 書けない文字を先に探し、置き換えのルールを決める
5 shift_jis を指定していないか ①・髙 を含むなら cp932
6 読み直して比べるか 〜・− などは別の文字に変わる

よくある質問

Q. 読み込むときのエラー(UnicodeDecodeError)とは違いますか。 A. 違います。Encode は書き出すとき、Decode は読み込むときのエラーです。読み込みのエラーは、関連記事の「UnicodeDecodeErrorの原因と直し方|cp932・utf-8・BOM」で扱っています。

まとめ

  • cp932 で表せない文字(絵文字・𠮷・é・— など)を書き出したエラー
  • shift_jis では ①・髙 も書けない。Windows の文字を含むなら cp932
  • print はリダイレクトしたときに出る。PYTHONUTF8=1 が手軽
  • open は encoding='utf-8' を必ず書く(3.15 からは既定が UTF-8)
  • Excel 向けの CSV は utf-8-sig。cp932 の errors='replace' は文字が ? になる
  • 〜・− などは、cp932 で保存すると別の文字に変わる

参考・出典

確認日はいずれも 2026年10月11日です。

  • Python ドキュメント「Built-in Functions」(open):https://docs.python.org/3/library/functions.html#open
  • PEP 528「Change Windows console encoding to UTF-8」:https://peps.python.org/pep-0528/
  • PEP 686「Make UTF-8 mode default」:https://peps.python.org/pep-0686/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「UnicodeEncodeError: 'cp932'の直し方|Python」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?