5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【ubuntu】Pythonの標準出力で日本語出力が出来なかった話

Posted at

Windowsで作成したpythonプログラムをubuntuで実行しようとしたときにはまった,文字コード関係のエラーについてまとめます.

エラーの内容

作業環境をWindowsからubuntuサーバに移行し,dockerを使ってpythonで書いたプログラムを実行する準備を進めていました.
コンテナを起動し,その中でプログラムを走らせたとき,次のエラーメッセージが表示されました.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-24: ordinal not in range(128)

どうやらprint("")で日本語を表示させようとするときに発生しているようでした.
しかし,ubuntuインストール時には日本語版パッケージを利用したので,全く日本語が表示できていないわけではありません.catコマンドでは日本語のテキストファイルを表示できていました.

原因

コンテナ内のターミナルでecho $LANGを実行して環境変数$LANGを確認したところ,空になっていました.
コンテナの外では日本語版utf-8(ja_JP.UTF-8)が設定されていたため,気づくのに時間がかかってしまいました.

解決方法

locale -aコマンドを実行してja_JP.UTF-8があるかどうかを確かめます.
存在していなければ,apt-getでlanguage-pack-jaをインストール.
その後,$LANGにja_JP.UTF-8を追記する.
LC_ALLにja_JP.UTF-8を指定する.
これらのコマンドをまとめると以下のようになります.

$ apt-get update
$ apt-get install language-pack-ja
$ export LANG=$LANG=:ja_JP.UTF-8
$ LC_ALL = ja_JP.UTF-8

exportを使っているので暫定的な処置にはなっていますが,ひとまずこれで標準出力で日本語を表示することに成功しました.
環境変数$LANGの設定だけでなく,LC_ALLの設定も必要でした.
pythonのターミナルがlocaleの設定ファイルを参照していて,その設定が適切でなかったために起きてしまったようです.具体的にどのlocaleを参照しているのか,時間があるときに調べたいです.

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?