Python

ファイル書き出し時に「cp932 codec can’t encode character」エラーが出る際の解決法

この記事は約3分で読めます。

 

PythonでツイッターのAPIを用いてツイートデータをスクレイピングして形態素解析を行っていたところ以下のようなエラーに遭遇しました。

 

<作業環境>

  • Windows10
  • Jupyterlab
  • Python3.7

 

<エラー内容>

cp932 codec can't encode character '\u014d'in position6: ilegal multibyte 
sequence

 

内容としてはCP932(日本語のエンコード方式)ではエンコードできない文字があるよって感じです。まあこの時に扱っていたデータはTwitterのツイートデータなので、絵文字とか特殊文字とかがひっかかっているのだと思われます。解決方法としては、エンコードの際の文字コードをutf-8に指定する、エラーを無視するの2通りが存在します。

 

テキスト出力時の処理

 

Pythonだと文字列データなどを writer.writerow(とかで書き出すわけですが、Pythonでtxtやcsvファイルに書き出す時には Python の内部表現をそのまま書き出すわけにはいきませんので、何らかの文字コードでエンコードし、バイト列にしてから書いてやることになります。

 

この時 Python 3 はデフォルトの文字コードとして 実行している OS の言語環境の文字コード を選択してしまいます。そして日本語の Windows では、その文字コードは CP932 と呼ばれるものになっています。

 

CP932 は Shift_JIS とは若干異なりますが日本語の文字コード一種です、 CP932 は日本語用の文字コードなので、英語でよく使われるUnicode文字をエンコードしようとするとエンコードエラーを起こします。

 

こういった場合の対処法として恐らく一番良いのはエラーの対象になっている文字をきちんと表現できる文字コードを指定することで、open()関数に encoding='utf-8' というキーワード引数を加えることで解決します。

 

またエラーを無視するのも策の1つでOpen関数にerrors='ignore'というキーワード引数を加えることでも解決します。

 

with open('test.csv', 'wb',encoding='utf-8', errors='ignore') as f:
    f.write(['2021-11-01', 'テスト', 'こんにちは'])

 

 

他にもPandasでcsvを読み込んだり出力した際にも文字コードの「UnicodeDecodeError」が発生することがあります。

 

関連記事:【Python】pandasのcsv読み込みで「UnicodeDecodeError」が出たときの解決方法一覧

 

終わり

 

MACやLinuxがUTF-8であるのに対して、日本で発売されているWindowsの文字コードはCP932なので、同じコードでもMACやLINUX環境で書かれた内部でエンコードで行っている系のプログラムをそのままコピペして実行しようとすると文字コードの関係でエラーになることがあるので注意しましょう。

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:ファイル書き出し時に「cp932 codec can’t encode character」エラーが出る際の解決法 […]

タイトルとURLをコピーしました