「クラウド」を検索したら「ザウアークラウト」が出てきた例

本書 (「プログラマのための文字コード技術入門」)のAppendixでは、Unicodeの正規化の必要性を示す例として、Webブラウザを使った問題例を示しました(pp.350-351)。同様の問題は、ブラウザだけでなく、Web検索エンジンでも生じます。

実例として、ある著名なWeb検索エンジンを使って実験してみましょう。

たとえばあなたがクラウドコンピューティングについて調べるために、「クラウド」というキーワードでWebを検索しようとしたとします。ただし、検索語を入力する際、画面上の別のアプリケーションにたまたま「クラウド」という文字列が表示されていたので、キーをタイプするのでなくコピー&ペーストで検索窓に貼り込んだとします。

ここでコピーした4文字目の「ド」という文字が、実はこの文字を表す単一の符号位置U+30C9でなく、Unicodeの結合文字を用いてU+30C8 (ト) とU+3099 (合成用濁点)という2つの符号位置の列によって表現されていたとします。すると何が起こるでしょうか。

(なお、「ド」を結合文字で表現した文字列はWindows XPに添付のフォントでは正しく表示されません。Windows Vistaに添付のフォント「メイリオ」をインストールすればXPでも正しく表示されます。)

下図に検索結果画面の一部を示します。濁点のない「クラウト」にヒットしており、ドイツ料理の「ザウアークラウト」についての文章が出てきてしまっています。「クラウドコンピューティング」は出てきません。「クラウド」という一般的な語にもかかわらず検索結果がわずか2千件強しかないことからしても、期待通りの挙動を示していないことがわかります。

文字合成の有無による検索漏れの画面例

つまり、この検索エンジンにUnicodeの合成文字を使った「ド」を与えると、あくまでも「ト」と半濁点の並びとみなし、合成済みの「ド」とは同一視されないという結論になります。

このように、同じ「ド」に2種類の符号化表現があるというのは、検索漏れなどの問題を引き起こす原因となるのです。

なお、ここで示した画面は2009年10月に採取した例であり、現在では動作や検索結果が変更されている可能性があります。


[「プログラマのための文字コード技術入門」紹介ページ]

2010年3月7日 公開

最近のブログ記事

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

広告