自宅サーバー(Ubuntu サーバー版)で作業していると、たまにlocaleがおかしいみたいなことを言われることがあった。
% svn up svn: warning: cannot set LC_CTYPE locale svn: warning: environment variable LANG is ja_JP.UTF-8 svn: warning: please check that your locale name is correct svn: Can't convert string from native encoding to 'UTF-8':
Macのクライアントとシェルの設定ファイルを共有しているので、.zshrcでLANGをja_JP.UTF-8にしていた。
下の記事によると、Ubuntuは初期状態では日本語のサポートは入ってなくて、ubuntu-desktop-jaのパッケージを入れるとよいらしい。
そういえば、Linuxのクライアントにはいつもubuntu-desktop-jaを入れてたけど、サーバーには入れてなかった。
普通ならLC_ALL=ja_JP.UTF-8としてあげるだけなのですが、それでは解決出来なかった。
Ubuntuで「svn: Can't convert string from 'UTF-8' to native encoding:」 - 自分の仕事を憎むには人生は余りにも短い
ちょっと考えたらまだ日本語が入れてなかった。
確かに日本語をインストールしなくちゃいけない。
locale -aしてみたところ、確かに、日本語がない。
% locale -a C en_US.utf8 POSIX
最初、POSIXがなにか分からなかったのだけど、調べると、CとPOSIXは同じものらしい。
CはASCIIしか扱えなくて、日本語が化けるやつ。
Conforming systems shall provide a POSIX locale, also known as the C locale.
Locale
検索したらたまたま引っかかったのだけど、このページはかなりしっかり書かれていて、何かと思ったら、UNIXの仕様書らしい。
もう1つのen_US.utf8は、英語で文字コードがUTF-8のもの。
localeを日本語にすると、dateとかのメッセージが日本語になってしまうことを思い出したので、先ほどのパッケージを入れたりはせず、LANGをen_US.utf8にしたところ、警告が出なくなった。
学んだこと
- Ubuntuのサーバー版、日本語のサポートが入っていない
- locale -aでサポートされているlocaleの一覧が出る
- localeのPOSIXはCと同じ
- The Open Group Base Specifications Issue 6 にUNIXの仕様書がある