Linuxのlocaleがおかしくなっていた
突然プログラムが起動しなくなったため、
原因を探ったところ、localesが壊れていました。
そのため、再インストールすることで直りました。
言語取得部分は動くけど、おかしい結果を返す壊れ方のため、
発見にわりと手間取りました。
まとめ
- プログラム上でlocaleを参照する部分がおかしい結果を返す
- 常にANSI_X3.4-1968
- Debian 7.8
- dpkg-reconfigure localesが何か壊れているメッセージを出す
- localeをアップデートすると直る
- apt-get install locales
localeの取得がおかしい
pythonではgetpreferredencoding()で設定されている言語情報を取ってこれます。
ですが、
LANG='ja_JP.UTF-8' echo 'import locale; print locale.getpreferredencoding()' | python
を実行しても、ANSI_X3.4-1968
が返ってきてしまい、日本語処理の部分でおかしくなっていました。
(前にそのプログラムは動いていたので、気がついたらおかしくなっていました)
localeを実行してみたところ、以下のように表示されました。
locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
どうやら日本語のlocaleが有効ではないようです。
ですが、/etc/locale.gen
では、ja_JP.UTF-8がコメントアウトされていて有効になっていました。
原因は不明だがとりあえず直る
sudo su
export LC_ALL=C # jaは使えないのでCにする必要がある
export LANG=C # jaは使えないのでCにする必要がある
sudo dpkg-reconfigure locales
したら、localesが壊れているというメッセージが出てきました。
そのため、
apt-get install locales
sudo dpkg-reconfigure locales
で、ja_JP.UTF-8を有効にしてリブートしたら上手くいくようになりました。
おそらくlocales周りがおかしくなっており、新しいlocalesを入れる際にそれが直ったのだと思います。