XMLHttpRequestの文字化けにoverrideMimeType
XMLHttpRequestでshift_jisなどからshift_jisのstaticなテキストを読もうとしたときに文字化けすることがある。
var n = new XMLHttpRequest(); n.open("/sjis.txt"); :
Content-Typeのcharsetがちゃんとしてなかったりする場合だ。で、MozillaのXMLHttpRequestにはoverrideMimeTypeというものがあって
var n = new XMLHttpRequest(); n.overrideMimeType("text/plain; charset=shift_jis"); n.open("/sjis.txt"); :
などとすると文字化けせずに取り出せるようだ。IEにはそのメソッドはないようだ。
GreaseMonkeyに適用する
0.5.3だと「Mozillaのプロファイルのフォルダ/Greasemonkeyのエクステンション/chrome/greasemonkey/content/xmlhttprequester.js」の100行目あたりの
if (details.headers) { for (var prop in details.headers) { req.setRequestHeader(prop, details.headers[prop]); } } req.send(details.data);
を
if (details.headers) { for (var prop in details.headers) { req.setRequestHeader(prop, details.headers[prop]); } } if( details.overrideMimeType ){ req.overrideMimeType( details.overrideMimeType ); } req.send(details.data);
とでもしてやれば、userscriptで
GM_xmlhttpRequest({ method: 'GET', url: 'http://example.com/1125306048.dat', overrideMimeType:"text/plain; charset=Shift_JIS", onload: function(responseDetails) { : } });
という感じで文字化けにも対応できる!
のだけれど、英語の問題で、その修正をどうやってGreasemonkeyの開発者に伝えればいいのかわからないので誰か代わりにお願いします…