漢数字をソートすると

| コメント(0) | トラックバック(0)

こんなブログ記事があって、面白く読みました。

「数字順にソートされない理由」はリンク先のブログ記事に書かれているとおりですが、「数の順にソートされないこと」が意外だということが、私には興味深く思えました。「漢数字」ではなく「漢字」ととらえれば、数の順に並ぶ必然性が特にないことは自然と納得されると思います。

文字コードにおける漢字の並び順

『プログラマのための文字コード技術入門』にも書きましたが、文字コード規格における漢字の並び順をちょっとおさらい。

  • JIS X 0208/0213の場合: 第1水準漢字は読みの順番、第2〜第4水準は(その水準内で)部首画数順
  • Unicodeの場合: 部首画数順 (ただし、順序はブロック内でしか通用しないので注意)

第1水準の読みの順番は、音読みが多いですが訓読みのものもあります。また、第3水準は第1水準の前や第1水準と第2水準の間にもあるので、単純にコードでソートするとおかしなことになります。さらに、JIS2004で第3水準に10文字追加された「表外漢字UCS互換」は、後から第3水準の隙間に詰め込んでいるので、これも例外となります。

またUnicodeの場合も、元々のCJK統合漢字ブロックと後から追加された拡張A, Bなんかをまたがると、コード順で整列した順序はデタラメになってしまいます。互換漢字があったりするとやはりうまくない。

対処の方針

文字コード順のソートは、あてにしないのが良いです。漢字の場合には特にです。例えばデータベースに格納されている人名のような場合は、読み仮名を別途持っておいてそれでソートする。

また、漢字以外でも、例えばアクセント付きのアルファベットを用いるフランス語やドイツ語等の欧州言語の場合にも文字コード順のソートというのはうまくありません。言語ごとの照合規則を用いる必要があります。JavaならCollatorクラスを使うとこれができます。『プログラマのための文字コード技術入門』p.257で紹介しています。国際的に使われるプログラムにはこうした考慮が必要となります。

余談

漢数字「一」「二」「三」に限ると、文字コード順のソートでは、JIS順でもUnicode順でも「一→三→二」になります。これはただの偶然の一致なのですが、ちょっと面白い、というか、ときによると紛らわしいかもしれません。

トラックバック(0)

トラックバックURL: http://yanok.net/yanok/mt-tb.cgi/551

コメントする

最近のブログ記事

Jアラート訓練メールで文字化けとのニュース
一昨日のことですが、中国・四国地方から文…
任俠の第3水準漢字
ユーモラス、と言っていいのか分かりません…
ふるさと納税で奥尻島のワインを頂きました
奥尻島は北海道の南西の方に浮かぶ島です。…
電子マネーの優先順位を考える
このブログを電子マネーとクレジットカード…
電子マネーiDの隠れたお得
iDというのはSuicaやEdyのような…

広告