vimperatorのlookupDictionary.jsがgoo辞書で文字化けしていたので修正
追記:パッチ1カ所ミスってました。パッチを当てた後の163行目は不要です。
URLエンコードアリの場合の↓の処理です。
url = dictionary.url.replace(/%s/g,encodeURIComponent(arg));
下のパッチの方も修正しておきました。
lookupdictionary.js のバグフィックス - hogehoge
さっき気づいたんですが、lookupDictionary.jsの:gooが文字化けしまくっています。
バグフィックスはされているとのことですが、相変わらず文字化けするのは私の環境がVimperator2.0preだからでしょうか。
ひとまず自分で出来ることはしようと思い、色々調べてみました。
その結果、goo辞書が返す文字コードが問答無用でEUC-jpになっていることが原因のようです。
lookupDictionary.jsの方にエンコード処理が入っていたので、EUC-jpを明示的に指定するようにしてみました。
それと文字化けではありませんが、日本語が含まれる検索をする場合(国語辞書など)のエンコードがUTF-8でないとダメなようです。
なんでやねん!という感じですが、EUC-jpでエンコードして辞書を引くと該当無しになってしまうので、そういうものだと思うしかありません。
lookupDictionary.jsの中では先のエンコードと同じものを使うようになっていたので、返ってくるHTMLの文字コードとURLの文字コードをそれぞれ指定できるようにしました。
- --- lookupDictionary.js Sat Oct 25 04:17:41 2008
- +++ lookupDictionary2.js Fri Nov 14 15:54:30 2008
- @@ -21,7 +21,9 @@
- shortHelp: 'goo 辞書',
- xpath: 'id("incontents")/*[@class="ch04" or @class="fs14" or contains(@class,"diclst")]',
- multi: true,
- - dictionary: 'en-US'
- + dictionary: 'en-US',
- + srcEncode: 'EUC-jp',
- + urlEncode: 'UTF-8'
- },{
- names: ['answers'],
- url: 'http://www.answers.com/%s',
- @@ -154,10 +156,11 @@
- if (special && sel) arg = sel;
- if (!arg) return;
- var url;
- - if (dictionary.encode) {
- + if (dictionary.urlEncode) {
- let ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1']
- .getService( Components.interfaces.nsITextToSubURI);
- - url = dictionary.url.replace(/%s/g, ttbu.ConvertAndEscape(dictionary.encode, arg));
- + url = dictionary.url.replace(/%s/g, ttbu.ConvertAndEscape(dictionary.urlEncode, arg));
- } else {
- url = dictionary.url.replace(/%s/g,encodeURIComponent(arg));
- }
- @@ -171,7 +174,7 @@
- }
- var xs = new XMLSerializer();
- liberator.echo(new XMLList('<div style="white-space:normal;"><base href="' + util.escapeHTML(url) + '"/>' + xs.serializeToString( result ).replace(/<[^>]+>/g,function (all) all.toLowerCase() ) + '</div>'), true);
- - }, dictionary.encode ? dictionary.encode : null);
- + }, dictionary.srcEncode ? dictionary.srcEncode : null);
- },
- {
- completer: function (arg) {

