2012-08-20 8 views
10

リクエストで正しいエンコーディングを取得しようとしています。リクエストを使用したnodejsエンコーディング

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

デンマーク語の文字のエンコーディングは正しくありません。

どのような考えですか?

+0

あなたはどのエディターを使用していますか? – Amberlamps

+1

あなたは 'content-type'ヘッダと' encoding'を混ぜ合わせました。例えば '' encoding '': "utf-8" 'です。しかし、ページは 'UTF-8'ではなく' ISO-8859-1'でエンコードされています。そのためには、http://stackoverflow.com/questions/8915404/http-get-and-iso-8859-1-encoded-responsesを参照してください。 –

+0

@Amberlamps:私はメモ帳を使用しています。++ – hippie

答えて

27

iconv(lite)を使用してこれを変換することができます。 encodingプロパティをnullに設定することで、エンコーディングをUTF-8のデフォルトに積極的に設定しないようにリクエストする必要もあります。したがって、あなたはする必要があります:

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

おそらくあなたのトラブルは'Accept-Encoding'ヘッダーにあります。

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; 
    } 
}); 
  • はデータを解凍するには、次のコードを使用して、このヘッダーを削除

    1. : だが、それがそうなら、あなたはこれを修正するには2つの方法を持っているあなたは'Accept-Encoding': 'gzip,deflate'

      のようなヘッダを持っているとしましょう

  • +0

    リクエストヘッダーから「accept-encoding」を削除すると、問題が解決しました。ありがとう。 –

    関連する問題