ソラマメブログ

2007年12月19日

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

日本語検索(SVC-1020)について解析してパッチを書き終わりました。
こんな漢字で日本語も通ります。
日本語検索(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のほうは投票が少ないようですね。
皆さん困っていないというよりは、日本語で検索できるはずだって知らないんじゃないでしょうか。



同じカテゴリー(viewer)の記事画像
日本語で検索できるようにするパッチ
1.18.6(0)で日本語入力は正式解消/字汚れは継続(寂)
昨日のバグ・トリアージのログが出たが
バグ取り上げ行きそこね(^^;)
字汚れのパッチを作った
Secondlife での 動画videoの撮影の方法
同じカテゴリー(viewer)の記事
 RC版ビューア 1.20.11 のビルド (の最後の部分) (2008-07-09 23:00)
 RC版1.20.1 (84760)が起動できない件の暫定対処 (2008-04-17 23:53)
 日本語で検索できるようにするパッチ (2007-12-19 22:01)
 公式ビューアからの日本語検索(SVC-1020) (2007-12-18 12:29)
 1.18.6(0)で日本語入力は正式解消/字汚れは継続(寂) (2007-12-06 12:08)
 字汚れは内部的には修正済み?/半角カナになるのは直った (2007-11-15 22:44)

Posted by march at 12:56│Comments(0)viewer
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。