Принудительно поставить русскую кодировку в XMLHttpRequest
Здравствуйте!
Пишу расширение, возникла проблема с XMLHttpRequest. Есть такой код:
var xrequest=new XMLHttpRequest(); xrequest.open("GET",url,false); xrequest.setRequestHeader("Accept-Language", "ru, en"); xrequest.setRequestHeader("Accept-Charset", "windows-1251"); xrequest.send(""); var result=xrequest.responseText;
В принципе работает, но сервер выдает неполные заголовки без "charset=windows-1251". И в результате responseText коверкает русские буквы. Повлиять на администрацию сервера нет возможности. Форум облазил, но нашел решение лишь для IE с помощью ADODB.Recordset и ResponseBody, а вот для Mozilla/FF нет. Как быть?
Content-type: text/plain; charset=windows-1251
Алексей Севрюков[досье]
Именно так:
request.overrideMimeType('text/plain; charset=windows-1251');
У меня работает.
Да работает, но частично (firefox 1.0.1). Почему-то при использовании overrideMimeType грузится, в лучшем случае, 4096 байт, без overrideMimeType все хорошо. Вот первый вариант:
function loader() { try { var request=new XMLHttpRequest(); request.open("GET", "http:/blablabla/blablabla.txt",true); request.overrideMimeType('text/plain;charset=windows-1251'); request.onreadystatechange = function() { if(request.readyState == 4) { if(request.status==200) { alert(request.responseText.length); } else { alert("Loading Error"); } } } request.send(""); } catch(ex) { alert(ex); }
В нем недогружаются данные. А вот второй вариант (nsIJSXMLHttpRequest), в нем, вообще, порождается ошибка загрузки:
function loader2() { try { var request=new XMLHttpRequest(); request.open("GET", “http:/blablabla/blablabla.txt”,true); request.overrideMimeType('text/plain;charset=windows-1251'); request.onload = function() { if(request.readyState == 4) { if(request.status==200) { alert(request.responseText.length); } else { alert("Loading Error"); } } } request.onerror = function() { alert("Error"); } request.send(""); } catch(ex) { alert(ex); }
Никто не сталкивался с таким странным поведением? Может в коде что-то не так?
Примечание от 2006-03-07: этот баг исправлен, в Firefox 1.5+/SeaMonkey 1.0+ всё работает нормально.