2012-04-16

Ubuntuでファイル名のソートがおかしい問題の修正

日本語のファイルを多数入れたディレクトリを、UbuntuのデフォルトのファイルマネージャーのNautilusで見たところ、不思議な挙動に気がついた。ファイル名のソートがなにかおかしい。不思議に思ってlsを使ってみると、やはりソートがおかしい。なぜか。Ubuntuのデフォルトのロケール設定のためである。

Ubuntuでは、デフォルトのLC_COLLATEは、en_US.UTF-8になっている。このままでは、ASCII内の文字ぐらいしかソートされない。CJK文字のソートは、どうもよく分からない不思議な順序で比較される。

ロケールというのは厄介だ。たとえば、ある言語では、アクセント記号の有無で別のコードポイントが割り当てられている文字があるが、そのような文字は同じ文字として扱ってほしいため、その言語のロケールの文字の比較は、そのように振る舞う。しかし日本語では、あまりロケールでなにかして欲しくない。思うに、日本語文字はやや複雑すぎて、何か賢そうなことをしようとすると、かえって悪い結果になるのだと思う。日本語環境における文字のソートは、単に生のコードポイントの大小比較の方がよっぽどましだ。

というわけで、日本人ならUbuntuのLC_COLLATEを"C"に変更すべきである。

  1. テキストエディタで、"~/.profile"を開く。
  2. 「export LC_COLLATE="en_US.UTF-8"」を、「export LC_COLLATE="C"」に書き換える。
  3. ログインしなおす

lsやNautilusがCJK文字をコードポイントの順序でソートしていることを確認する。

No comments: