私はcharset = iso-8859-7でHTMLコンテンツを返すURLを持っています。これは角度HTTPリクエストがデフォルトでutf8にデータを変換し、iso-8859-7で正しくエンコードできないことを意味します。多くの検索の結果、多くの人が同じ問題を抱えていることがわかりました。その答えのほとんどは、サーバーの文字セットを変更することでした。サーバーとして機能できないものは、私のものではありません。Angular2 Httpリクエストがbodyをバイナリとして返す方法は?
私はiso-8859-7文字列にエンコードすることができるので、質問はどのようにHTTP要求がバイナリを返すことができるのですか?
EDIT - SOLUTION:RequestOptionsで:私は最終的にTextDecoderと{ResponseContentType.ArrayBufferresponseType}を使用するようにすることでした何
。ここでは、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'));
}
をあなたが – Gary
何@Garyを使用している任意のヘッダを含む、あなたの要求の詳細を投稿してくださいと述べました。 –
['response.arrayBuffer()'](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)を使用するとどうなりますか? –