python3 ‘ascii’ codec can’t encode character ‘\u3042’ in position 0: ordinal not in range(128)解決方法

python文字コードエラー(ascii codec can’t encode character)の解決方法

python文字コードエラーの解決方法は3つあります。

1つめは、localeを設定する方法
2つめは、文字を出力するときに毎回エンコードを設定する方法
3つめは、はじめに全体のエンコーディングを設定する方法です。

おすすめははじめに全体のエンコーディングを設定する方法です。
localeで設定してもターミナルを閉じると設定が消えてしまいます。
また、windows,macごとに設定方法が異なります。

はじめに全体のエンコーディングを設定して文字コードエラーを解決する


import io,sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

上記コードをはじめに設定することです。
これですべてutf-8の文字エンコーディングになります。

毎回文字エンコードを設定する方法もありますが面倒なので上記の方法が一番簡単で良いと思っています。

下の内容はわたしが文字コードエラーが出たときの現象やlocaleを設定して文字コードエラーを解決を記載しています。

python3で日本語を出力しようとするとエンコードエラーになる

pythonで「あ」を出力しようとしたら下記のようなエラーが発生しました。
print('あ')
'ascii' codec can't encode character '\u3042' in position 0: ordinal not in range(128)

‘ascii’ codec can’t encode character解決方法

localeの設定を確認します。

下記コマンドをターミナル(Macの場合)で実行しlocaleの設定を確認します。
$locale

locale出力結果

LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

「LC_ALL=」が設定されていない。もしくは「LC_ALL=”C”」の場合はエラーになります。

下記コマンドを実行して設定をすべて「en_US.UTF-8」に変更します。
$export LC_ALL=en_US.UTF-8

locale出力結果

LANG="en_US.utf8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

これで日本語の「あ」が表示されるようになりました。