强制编码在XHR请求中使用

时间:2013-08-26 14:36:26

标签: javascript jquery utf-8 xmlhttprequest windows-1252

在我正在开发的浏览器扩展中,我正在使用jQuery执行XHR请求来加载一些数据:

$.get(url).done(function(data, textStatus) {
    console.log(data);
})

远程加载的数据是一个windows-1252编码的CSV文件,配有Content-disposition:附件,没有mime-type / charset标头(我没有后端控件,所以我无法修复)

如何强制浏览器将响应解码为windows-1252而不是utf-8,因为它显然目前在做什么?

3 个答案:

答案 0 :(得分:1)

正如我之前的研究和第一个答案所暗示的那样,我找不到使用jQuery做我想要的方法。 我使用带有responseType = blob的vanilla XMLHttpRequest解决了这个问题,如https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data中所述

var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "blob";
oReq.onload = function(e) {
    var blob = new Blob([oReq.response], { type : 'text\/csv' });
    account.data = blob;
}
oReq.onerror = function(e){
    ...
}
oReq.send();

幸运的是,我已经使用Blob将数据发布回服务器,所以我实际上是在这里保存解码/编码步骤......

答案 1 :(得分:0)

如果在请求中设置了正确的编码,jQuery是否对响应使用相同的编码?

这就是:

$.ajax({
    type: "GET",
    url: "test.php",
    contentType: "application/x-www-form-urlencoded;charset=windows-1252",
    dataType: 'json',
    success: function(data) {
            console.log(data);
    }
});

答案 2 :(得分:0)

我不确定是否有可能。 doc表示您可以指定字符集,但浏览器将始终将请求设置为UTF-8(按规格):

  

contentType(默认值:'application / x-www-form-urlencoded;   字符集= UTF-8' )

     

类型:字符串将数据发送到服务器时,请使用此选项   内容类型。默认为“application / x-www-form-urlencoded;   charset = UTF-8“,这在大多数情况下都适用。如果你明确通过   在内容类型为$ .ajax(),然后它总是发送到服务器   (即使没有数据发送)。 W3C XMLHttpRequest规范   规定字符集始终是UTF-8;指定另一个字符集   不会强制浏览器更改编码。

所以代码将是这样的:

$.ajax({
    type: 'GET',
    url: url,
    contentType: "application/x-www-form-urlencoded; charset=windows-1252",
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
});

如果这不起作用,你应该创建一个“代理”,将你的文件从windows-1252转换为utf-8