lookupdictionary.js のバグフィックス
で書かれているとおり、goo辞書が文字化けしていた。
やっと思い腰を上げて修正に取りかかったのだが、ちょっと苦労。
当初、XMLHttpRequestで受け取ったテキストを
var unicode = Cc['@mozilla.org/intl/scriptableunicodeconverter;1']. getService(Ci.nsIScriptableUnicodeConverter); function convert(str, charset){ if (!str) return ""; try { unicode.charset = charset; str = unicode.ConvertToUnicode(str); } catch(e) {} return str; }
こんな関数に掛けてやれば解決するだろうと思っていた*1のだが、何度やってみても上手くいかない。
XMLHttpRequestにoverrideMimeType
メソッドがあるのを思い出して、試しにtext/html; charset=CHARSET
を加えてみたところ成功。
挙動から察するに、XMLHttpRequestは文字コードの変換までやってくれるみたいね。ただしレスポンス・ヘッダのContent-Type
にcharset
の指定がないとデフォルトのUTF-8で変換してしまう、という感じだろうか。
しかし、このプラグインを作った時は文字化けしていなかった。goo側の仕様が変わったというより、Firefoxが2から3になった影響が考えられるが、XMLHttpRequestに変更が加わったのだろうか?