Pythonプログラミング通信講座の「日時データ」の学習において、datetimeのstrftime()メソッドを実行した時に、以下のようなエラーが表示される場合の対処法を説明します。

>>> import datetime
>>> tokyo_2020 = datetime.date(2020, 7, 24)
>>> tokyo_2020.strftime("%Y年%m月%d日")Traceback (most recent call last):
  File "", line 1, in 
    tokyo_2020.strftime("%Y年%m月%d日")
UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error
>>> 

このエラーは、一般的な日本語版のWindowsでは発生しません日本語版以外のWindowsパソコンをお使いの場合や言語・ロケールの設定を変更している場合に発生します。

Pythonはstrftime()メソッドを処理するのに、Windows内のライブラリを使用します。そのため、Windowsシステムが日本語以外の場合、書式("%Y年%m月%d日")の中の日本語をエンコードできないので、UnicodeEncodeErrorを投げます。

このエラーを回避するには、PythonのプログラムからWindowsのライブラリを呼び出す時のロケール情報を変更します。実際には以下のコードを先に実行しておくだけです。

>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, "Japanese_Japan.932")

まだエラーが表示される場合はこちらも試してください。
>>> locale.setlocale(locale.LC_CTYPE, "English_United States.932")

これで、以下のようにstrftime()メソッドが実行できるようになります。

>>> tokyo_2020.strftime("%Y年%m月%d日")
'2020年07月24日'

今後、同じパソコンでstrftime()メソッドを使用する場合は、コードの最初の方で1度だけ上記のコードを実行しておけばエラーを回避できます。

エラーが回避できない場合

上記の方法でもエラーが表示されてしまう場合は、お手数ですが以下の出力結果と一緒にご質問フォームからお問い合わせください。

>>> import sys
>>> sys.version
>>> import locale
>>> locale.getdefaultlocale()
>>> locale.getlocale()
>>> locale.getpreferredencoding()

参考

strftime()メソッドがどのように実行されるか、ロケールの情報、については以下の公式ドキュメントが参考になります。