ソラマメブログ

  

Posted by at

2007年12月19日

日本語で検索できるようにするパッチ

検索ウインドウで日本語で検索できないよ!というレポートが上がっていたので、
日本語で検索できるようにするパッチを作りました。
http://jira.secondlife.com/browse/SVC-1020



まだvoteが3でほとんど誰も注目していないようですが、
「入力が半角カナになっちゃうよ事件」(笑)のように
皆が必要だと思って投票すれば、正式リリースに組み込まれるかもしれません。


投票のしかたはこの辺のページが参考になります。

不満があればJIRAに投票
http://keimar.slmame.com/e65545.html

日本語入力おかしいと思ったらJiraで投票
http://movings.slmame.com/e65518.html

JIRAについて ~日本語環境のセカンドライフに困っていませんか - Chizzy Dilley のセカンドライフレポート
http://blogmag.ascii.jp/secondlife/2007/11/001060.html

Issue tracker-ja - Second Life Wiki
https://wiki.secondlife.com/wiki/Issue_tracker/ja




日本語で検索すると意外な発見があって面白いですよー

  
タグ :JIRA投票vote


Posted by march at 22:01Comments(1)viewer

2007年12月19日

日本語検索(SVC-1020)パッチ書き終わり

日本語検索(SVC-1020)について解析してパッチを書き終わりました。
こんな漢字で日本語も通ります。



現在のビューアでの問題点ですが、
ビューアで日本語を受け取ってから検索サイトに投げる前に「URLエスケープ」という処理が必要ですが、
そこがうまく動いていませんでした。


英数字や一部の記号以外はUTF-8にして1バイトずつ%をつける必要があります。
例えば「あ」はUTF-8では「E38182」なので「%E3%81%82」に変換します。

この処理を行う中で、バイト列を1バイトずつ扱う部分があるのですが、
その処理の中で1バイトをcharで取り出してU32(つまりunsigned int)に変換している箇所があり、
そこで符号拡張によりおかしくなっていました。
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E6%8B%A1%E5%BC%B5 などをご覧ください。
例えば、上記の「E3」は2進数では「1110 0011」ですが、先頭が1なため数字としては負の数になり、
内部で格納するときは「FFFFFFE3」2進数では「1111 1111 1111 1111 1111 1111 1110 0011」となります。
これを元に戻さないまま文字にしようとしていて「%FFFFFFE3」と変換されていました。
頭の%FFが空白のように表示されたため空振り時のメッセージとして「 FFFFE3」のように表示されました。

例えば「abあcd」で検索すると、「 Your search - ab FFFFE3 FFFF81 FFFF82cd - did not match anything」
のように、FFFFの前にだけ空白があくことが分かります。


解決方法ですが、必ず1バイトしか扱わないと分かっているため、0xFFでマスクして頭を0にしました。
ただ、ここ以外でもURLに動的引数を使うなど、URLエスケープが必要なケースがあるはずなので、
URLエスケープするための関数は別にしました。


あとは満足するまでテストケースを追加して、この説明を英訳してパッチと共に投げるだけですが、
JIRAのほうは投票が少ないようですね。
皆さん困っていないというよりは、日本語で検索できるはずだって知らないんじゃないでしょうか。
  


Posted by march at 12:56Comments(0)viewer