XMLHttpRequest and character encoding
The XMLHttpRequest transport method retrieves content over http, just like a regular http request from a web browser does.
There are two result variants:
The responseXml field holds a parsed DOM tree if the retrieved source was well formed XML
The responseText field holds the raw source, a Javascript string basically.
With current Firefox versions (1.5.x) this responseText string is always forced into UTF-8, regardless of the charset encoding sent by the originating web server. Thus valid ISO-8859-1 characters end up as illegible garbage in resulting Javascript string.
This can be a problem for instance with Greasemonkey scripts targeted at a server, which uses something other than UTF-8 as encoding format.
Now there is a solution, along the lines of this Bugzilla entry: Bug 337434 – XMLHttpRequest mangles binary data – that is: use method overrideMimeType on the XMLHttpRequest object before making the originating call.
Code example:
// XHR implementation
// overrideMimeType is available to Moz' native XHR
function requestPage(src, func) {
var xhr = new window.XMLHttpRequest();
xhr.onreadystatechange = function() { func(xhr); };
xhr.open("GET", src);
// this fixes the content type glitch...
xhr.overrideMimeType("text/html; charset=ISO-8859-1");
xhr.send(null);
}
This solves the problem for regular XMLHttpRequest calls, without the benefits of cross domain permissions of the GM_xmlhttpRequest method of course. It would be nice if this method could be exposed in Greasemonkey as well!
Popularity: 100%
Tags: Character encoding, firefox, greasemonkey, HTTP, UTF-8, web browser, web server, XML, XMLHttpRequest
Permalink

![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=3ebb5af7-fe87-4c03-a979-486157ccfa28)

