2017-04-02 5 views
2

私は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')); 
} 
+2

をあなたが – Gary

+0

何@Garyを使用している任意のヘッダを含む、あなたの要求の詳細を投稿してくださいと述べました。 –

+0

['response.arrayBuffer()'](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)を使用するとどうなりますか? –

答えて

2

リクエストを送信するときには、RequestOptionsArgsを含めます。

フィールドresponseType : ResponseContentTypeRequestOptionsArgsに指定します。 (ResponseContentType.ArrayBufferまたはResponseContentType.Blob

TextDecoderなどの結果をデコードしてください。

は、ドキュメントを参照してください:

https://angular.io/api/http/Http

https://angular.io/api/http/RequestOptions

https://angular.io/api/http/ResponseContentType

+0

魅力的に機能したイェップ!そしてTextDecoder仕事もやった! – Rambou

関連する問題