Tengo una url que devuelve el contenido html con charset=iso-8859-7, lo que significa que la solicitud http angular convierte los datos a utf8 de manera predeterminada y no puedo codificarlos nuevamente en iso-8859-7 correctamente. Después de mucho buscar, descubrí que muchas personas tenían el mismo problema y la mayoría de las respuestas eran cambiar el conjunto de caracteres en el servidor, algo que no puedo hacer porque el servidor no me pertenece.
Entonces, la pregunta es ¿cómo puede la solicitud HTTP devolver binario para que pueda codificarlos en una cadena iso-8859-7?
EDITAR - SOLUCIÓN:
Lo que finalmente hice fue usar TextDecoder y { responseType: ResponseContentType.ArrayBuffer } en RequestOptions . Aquí hay un ejemplo para ayudar a cualquiera que esté tratando de analizar páginas html y decodificarlas en la codificación correcta. Espero ayudar a todos los chicos que intentaron esto en un proyecto que usa Angular2 como Ionic2.
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')); }Incluya RequestOptionsArgs cuando envíe la solicitud.
Especifique el tipo de responseType : ResponseContentType dentro RequestOptionsArgs . (Ya sea ResponseContentType.ArrayBuffer o ResponseContentType.Blob )
Use TextDecoder o algo similar para decodificar el resultado.
Ver los documentos:
https://angular.io/api/http/Http