[linux-users: 108952] Re: sort や uniq で違う文字が同一視される

bogytech+lu @ gmail.com bogytech+lu @ gmail.com
2013年 10月 31日 (木) 22:28:48 JST


花高です。

Kazuhiro NISHIYAMA <zn @ mbf.nifty.com> writes:
> U+2460 CIRCLED DIGIT ONE
> U+2461 CIRCLED DIGIT TWO
> U+2600 BLACK SUN WITH RAYS
> などの文字が sort や uniq で同じものとして扱われているようで、
> 困っています。

そうですね。glibc に付属の ja_JP の定義はかなり古いもので、
EUC-JP を念頭に書いてあって、JIS X 0208 順にソートするよう
になっています。そのため第三水準やユニコードで増えた文字に
は対応できていません。

> 原因を調べていったところは glibc の locales のファイルで
> LC_COLLATE から END LC_COLLATE の間に書かれていない文字が
> 同一視されているように思いました。

そこまで調べられたのならば、LC_COLLATEを自分で書いて定義し
てやるという手は一応あります。ただ真面目にやろうとすると、
かなり手間ですし、日本語のソート順をどするか(辞書順? JIS
文字コード順? ユニコード規定(TR#10,ISO 14651)順?など色々
と悩ましくなること受けあいです。

> とりあえず LC_COLLATE=C にすれば問題はおきないように
> 見えるのですが、そういう解決方法しかないのでしょうか。

どのような順番にソートすることをご期待なのかわかりませんが、
単純に言語を無視してバイト順でソートしたいだけならば、実は
LC_COLLATE=C が最も適切な解決策なのではないかと思います。
-- 
HANATAKA, Shinya


linux-users メーリングリストの案内