django(python3.6)でcreatesuperuserするとUnicodeEncodeErrorが発生する

久々の記事です。
今まで備忘録をサボっていましたが、やはり都度記録に残すことが大事だと思いなおし、Djangoの勉強がてら、躓いた小さな石から大きな石まで記事に残そうと思います。

というわけで、1年前につくったアプリを久々に触ろうと思いDBコンテナを新しく作り直したため、管理者ユーザも新規で作り直そうとしたところでこけました。
Pythonいじってると必ずといっていいほど出てくる「UnicodeEncodeError」ですね。

# python manage.py createsuperuser
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/python/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/python/lib/python3.6/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 62, in execute
    return super().execute(*args, **options)
  File "/usr/local/python/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "/usr/local/python/lib/python3.6/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 115, in handle
    username = self.get_input_data(self.username_field, input_msg, default_username)
  File "/usr/local/python/lib/python3.6/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 196, in get_input_data
    raw_value = input(message)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

このエラー自体は、マルチバイト文字をUnicodeエンコードしようとして失敗した場合に起きるっぽいです。
ただ、createsuperuserで起きてしまっているので、ソースの中に原因があるというよりは外(環境面)に原因がありそうです・・・。
と調べていたら以下の記事が出てきました。

https://stackoverflow.com/questions/54519674/unicodeencodeerror-raised-when-createsuperuser-is-called

fmfm、PYTHONIOENCODINGという環境変数があるのですね。
全然知りませんでした(笑)

# export PYTHONIOENCODING="UTF-8"
# python manage.py createsuperuser
ユーザー名 (leave blank to use 'root'): 

無事に応答が返ってきました。
PYTHONIOENCODINGというくらいなので、createsuperuser以外でも使われそうな感じしますよね。
毎回設定するのも面倒くさいので、profileに書いとくかDockerfileに書いとくのがよいかもしれません。