2012-08-20 38 views
10

Tôi đang cố gắng để có được mã hóa chính xác với yêu cầu.nút mã hóa bằng cách sử dụng yêu cầu

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

Không có vấn đề gì tôi làm mã hóa của các ký tự danish không đúng.

Mọi suy nghĩ?

+0

Bạn đang sử dụng trình chỉnh sửa nào? – Amberlamps

+1

Bạn đã trộn 'encoding' với tiêu đề' content-type' - ví dụ: '" encoding ":" utf-8 "'. Tuy nhiên, trang được mã hóa trong 'ISO-8859-1' thay vì' UTF-8'. Để làm điều đó, hãy xem http://stackoverflow.com/questions/8915404/http-get-and-iso-8859-1-encoded-responses. –

+0

@Amberlamps: Im sử dụng notepad ++ – hippie

Trả lời

27

Bạn có thể sử dụng biểu tượng (lite) để chuyển đổi điều này. Bạn cũng cần phải yêu cầu không chủ động đặt mã hóa thành mặc định UTF-8 bằng cách đặt thuộc tính encoding thành null. Do đó bạn nên làm:

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

Có thể sự cố của bạn là ở tiêu đề 'Accept-Encoding'. Hãy nói rằng bạn có Headers như 'Accept-Encoding': 'gzip,deflate'

Nếu đó là như vậy, bạn có 2 cách để sửa chữa này:

  1. Hủy bỏ Tiêu đề này
  2. Sử dụng đoạn mã sau để giải nén dữ liệu:

    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

Việc xóa 'chấp nhận mã hóa' khỏi tiêu đề yêu cầu đã khắc phục sự cố cho tôi. Cảm ơn. –

Các vấn đề liên quan