java-javascriptのエンコード

PHPで作ったonlinebookmark(はてぶみないの)を改良したいとずっと思っていた。なので、javaの練習がてら一から作り直すことにした。

しかし、onlinebookmarkの要であるbookmarkするページのデータ送信に関する文字列がどうもうまくいかない。。。。

余談になるが、onlinebookmarkは
javascript:window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(document.title)+'&url='+escape(location.href),%20'_blank',%20'width=550,height=600,resizable=1,scrollbars=1');undefined;
でtitle=(document.title),とurl=(document.href)でhttp:〜。にgetで送られる。

どの様にうまくいかないかというと、titleに日本語が含まれると、文字が化け化けしてしまうのだ。
この部分が大事なのは分かるけど、こっちもそんなに時間が取れない身(卒論、バイト、etc......)なので、応急処置として、javascript側に昔どっかからとってきたencode処理関数を実装し、java側で

title = new String(title.getBytes("iso-8859-1"),"utf-8");

とした結果なんとかうまくいった。

しかし、どうも気持ち悪い。どうすればいいのだろう。。。。。。。。

ちなみに、javascriptは以下のコード(firefoxのlinkに含めるよう1行に纏めたため、かなり見ずらいけど.....)

javascript:(function(){var%20s0,%20i,%20s,%20u;s0%20=%20%22%22;var%20str%20=%20document.title;for%20(i%20=%200;%20i%20<%20str.length;%20i++){s%20=%20str.charAt(i);u%20=%20str.charCodeAt(i);if%20(s%20==%20%22%20%22){s0%20+=%20%22+%22;}else%20{if%20(%20u%20==%200x2a%20||%20u%20==%200x2d%20||%20u%20==%200x2e%20||%20u%20==%200x5f%20||%20*1%20||%20*2%20||%20*3{%20s%20=%20%220%22+u.toString(16);s0%20+=%20%22%%22+%20s.substr(s.length-2);}else%20if%20(u%20>%200x1fffff){s0%20+=%20%22%%22%20+%20(oxf0%20+%20*4.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20*5.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20*6.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20(u%20&%200x3f)).toString(16);}else%20if%20(u%20>%200x7ff){s0%20+=%20%22%%22%20+%20(0xe0%20+%20*7.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20*8.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20(u%20&%200x3f)).toString(16);}else%20{s0%20+=%20%22%%22%20+%20(0xc0%20+%20*9.toString(16);s0%20+=%20%22%%22%20+%20(0x80%20+%20(u%20&%200x3f)).toString(16);}}}}window.open('http://localhost:8080/bookmark/regist?title='+s0+'&url='+location.href,'myBookMark','width=500,height=600,menubar=yes,toolbar=yes,scrollbars=yes');}())

*1:u%20>=%200x30)%20&&%20(u%20<=%200x39

*2:u%20>=%200x41)%20&&%20(u%20<=%200x5a

*3:u%20>=%200x61)%20&&%20(u%20<=%200x7a))){s0%20=%20s0%20+%20s;}else%20{if%20((u%20>=%200x0)%20&&%20(u%20<=%200x7f

*4:u%20&%200x1c0000)%20>>%2018

*5:u%20&%200x3f000)%20>>%2012

*6:u%20&%200xfc0)%20>>%206

*7:u%20&%200xf000)%20>>%2012

*8:u%20&%200xfc0)%20>>%206

*9:u%20&%200x7c0)%20>>%206