在我正在开发的浏览器扩展中,我正在使用jQuery执行XHR请求来加载一些数据:
$.get(url).done(function(data, textStatus) {
console.log(data);
})
远程加载的数据是一个windows-1252编码的CSV文件,配有Content-disposition:附件,没有mime-type / charset标头(我没有后端控件,所以我无法修复)
如何强制浏览器将响应解码为windows-1252而不是utf-8,因为它显然目前在做什么?
答案 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