我有一个返回html内容的url,charset=iso-8859-7,这意味着angulars http请求默认将数据转换为utf8,我无法将它们正确地编码回iso-8859-7。经过大量的搜索,我发现很多人都有同样的问题,大多数的答案是改变服务器中的字符集,这是我无法做到的,因为服务器不属于我。
所以问题是http请求如何返回二进制以便我可以将它们编码为i so-8859-7字符串?
编辑-解决方案:
我最后做的是在requestoptions中使用textdodecoder和{responseType:responseContentType.arrayBuffer}。这里有一个例子可以帮助任何试图解析html页面并将其解码为正确编码的人。希望能帮助所有在一个像Ionic2那样使用Angular2的项目中尝试过这个的人。
public parser() {
// Set content type
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded;'});
// Create a request option, with withCredentials for sending previous stored cookies
let options = new RequestOptions({
withCredentials: true,
headers: headers,
responseType: ResponseContentType.ArrayBuffer
});
return this.http.get('https://blablablablabla', options) // ...using get request
.map((res: any) => {
var string = new TextDecoder('iso-8859-7').decode(res._body);
var parser = new DOMParser();
var htmlDoc = parser.parseFromString(string, "text/html");
console.log(string)
..... blabla blabla doing some stuff here .....
})
.catch((error: any) => Observable.throw(error || 'Server error'));
}
最佳答案
在发送请求时包含RequestOptionsArgs
。
指定responseType : ResponseContentType
内的字段RequestOptionsArgs
。(要么ResponseContentType.ArrayBuffer
要么ResponseContentType.Blob
)
使用TextDecoder
或类似的方法解码结果。
参见文档:
https://angular.io/api/http/Http
https://angular.io/api/http/RequestOptions
https://angular.io/api/http/ResponseContentType