2012-08-20 23 views
10

Estoy tratando de obtener la codificación correcta con la solicitud.codificación nodejs usando la solicitud

request.get({ 
    "uri":'http://www.bold.dk/tv/', 
    "encoding": "text/html;charset='charset=utf-8'" 
    }, 
    function(err, resp, body){  
    console.log(body); 
    } 
); 

No importa lo que haga la codificación de los caracteres daneses no es correcta.

¿Alguna idea?

+0

¿Qué editor estás usando? – Amberlamps

+1

Ha mezclado 'codificación' con el encabezado' content-type', p. Ej .: '" encoding ":" utf-8 "'. Pero, la página está codificada en 'ISO-8859-1' en lugar de' UTF-8'. Para eso, vea http://stackoverflow.com/questions/8915404/http-get-and-iso-8859-1-concoded-responses. –

+0

@Amberlamps: Estoy usando el bloc de notas ++ – hippie

Respuesta

27

Puede usar iconv (lite) para convertir esto. También debe indicar a la solicitud que no establezca activamente la codificación en el valor predeterminado de UTF-8 estableciendo la propiedad de codificación como nula. Por lo tanto usted debe hacer:

var iconv = require('iconv-lite'); 
request.get({ 
    uri:'http://www.bold.dk/tv/', 
    encoding: null 
    }, 
    function(err, resp, body){  
    var bodyWithCorrectEncoding = iconv.decode(body, 'iso-8859-1'); 
    console.log(bodyWithCorrectEncoding); 
    } 
); 
1

Tal vez su problema es en 'Accept-Encoding' cabecera. Digamos que usted tiene encabezados como 'Accept-Encoding': 'gzip,deflate'

Si es así, usted tiene 2 maneras de solucionar este:

  1. eliminar esta cabecera
  2. Utilice el siguiente código para descomprimir los datos:

    const req = request(options, res => { 
        let buffers = [] 
        let bufferLength = 0 
        let strings = [] 
    
        const getData = chunk => { 
         if (!Buffer.isBuffer(chunk)) { 
          strings.push(chunk) 
         } else if (chunk.length) { 
          bufferLength += chunk.length 
          buffers.push(chunk) 
         } 
        } 
    
        const endData =() => { 
         let response = {code: 200, body: ''} 
         if (bufferLength) { 
          response.body = Buffer.concat(buffers, bufferLength) 
          if (options.encoding !== null) { 
           response.body = response.body.toString(options.encoding) 
          } 
          buffers = [] 
          bufferLength = 0 
         } else if (strings.length) { 
          if (options.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { 
           strings[0] = strings[0].substring(1) 
          } 
          response.body = strings.join('') 
         } 
         console.log('response', response) 
        }; 
    
        switch (res.headers['content-encoding']) { 
         // or, just use zlib.createUnzip() to handle both cases 
         case 'gzip': 
          res.pipe(zlib.createGunzip()) 
           .on('data', getData) 
           .on('end', endData) 
          break; 
         case 'deflate': 
          res.pipe(zlib.createInflate()) 
           .on('data', getData) 
           .on('end', endData) 
          break; 
         default: 
          res.pipe(zlib.createInflate()) 
           .on('data', getData) 
           .on('end', endData) 
          break; 
        } 
    }); 
    
+0

Al eliminar 'accept-encoding' del encabezado de la solicitud se solucionó el problema. Gracias. –

Cuestiones relacionadas