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:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.