2013-10-24 13 views
5

Sono nuovo su Node.js e sto cercando di utilizzare il modello di richiesta per eliminare un sito Web, sto riscontrando problemi con la codifica: il sito Web di destinazione è utilizzando big5 come la codifica, e ho voluto trasformarlo in UTF-8 con il seguente codice:Codifica da big5 a utf-8 durante lo scraping del sito Web con richiesta di nodo

var Iconv = require('iconv').Iconv; 
var fs = require('fs'); 
var big5_to_utf8 = new Iconv('big5', 'utf-8'); 
var buffer = big5_to_utf8.convert(fs.readFileSync('./test')); 
console.log(buffer.toString()); 

dubito che il problema potrebbe essere causato a causa di qualche torto nel processo di rottamazione, quindi per il vostro riferimento, la mia codice per la rottamazione:

var fs = require('fs'); 
var request = require('request'); 

var j = request.jar() 
var cookie = request.cookie('ASPSESSIONIDCSDCTTSR=KDMMMIMDCCIHJIJFDKGEDFOH') 
j.add(cookie) 

request({ 
    url: 'http://amis.afa.gov.tw/v-asp/v101r.asp', 
    method: "POST", 
    "Content-type": "application/x-www-form-urlencoded;", 
    jar:true, 
    encoding: 'utf-8', 
    form: { 
     mhidden1:false, 
     myy:101, 
     mmm:9, 
     mdd:25, 
     mpno:"FC", 
     mpnoname:"%ADJ%A5%CA++++", 
     B1:"%B6%7D%A9l%ACd%B8%DF", 
    } 
}, function (error, response, body) { 
    console.log(body); 
    fs.writeFile("test", body); 
}); 

Apprezzo davvero il tuo aiuto.

EDIT:

Per essere più specifici per l'errore, i seguenti sono ciò che il codice restituisce:

<p align="center"><font color="#800080">�Шϥ��s�����u���C��</font><em><font 
size="4" color="#000080">[�W�@��]</font></em><font color="#800080">�^���e�@���J�����e���~���d��</font></p> 

Questo è ciò che deve restituire:

<p align="center"><font color="#800080">請使用瀏覽器工具列中</font><em><font size="4" color="#000080">[上一頁]</font></em><font color="#800080">回到前一輸入條件畫面繼續查詢</font></p> 

I ha anche provato a utilizzare iconv-lite anziché iconv, sostituendo la chiamata di funzione al seguente:

function (error, response, body) { 
    var bufferhelper = new BufferHelper(); 
    bufferhelper.concat(body); 
    console.log(iconv.decode(bufferhelper.toBuffer(), 'Big5')); 
}); 

solo per ottenere:

<p align="center"><font color="#800080">�濆詉胬胬譃胬舚胬</font><em><font 
size="4" color="#000080">[抝胬]</font></em><font color="#800080">䒷胬蓚胬鸜胬胬蓚胬趦胬胬</font</p> 
+0

Hai verificato che i dati siano effettivamente codificati in big5? – SheetJS

+0

Per Nirk: ho appena controllato di nuovo, sì, la pagina è codificata sotto big5. – muyueh

+0

'Sto avendo un problema', descrivo il problema esatto che stai affrontando. Qual è il risultato del tuo codice. Hai qualche errore? – user568109

risposta

6

Io uso iconv-lite di decodificare big5 a utf8.

E si dovrebbe impostare encoding:null che request restituirà la pagina di codifica non elaborata.

Questo è un codice di esempio.

var iconv = require('iconv-lite'); 
var request = require('request'); 
request({ url: 'http://amis.afa.gov.tw/v-asp/v101r.asp',encoding:null}, function(err,  response, body) { 
    if (!err && response.statusCode == 200) { 
    var str = iconv.decode(new Buffer(body), "big5"); 
    console.log(str); 
    } 
}); 

E cambio è

<html> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=big5"> 
<title>v101r</title> 
<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> 
<meta name="Microsoft Theme" content="none, default"> 
</head> 

<body> 
<p align="center">查無結果!</p> 

<p align="center"><font color="#800080">請使用瀏覽器工具列中</font><em><font 
size="4" color="#000080">[上一頁]</font></em><font color="#800080">回到前一輸入條件畫面繼續查詢</font></p> 
</body> 
</html> 

Io uso node.js 0.10.20 su RedHat EL 6.4 e iconv-lite 0.2.11, request 2.27.0

+0

molte grazie:) – muyueh

+0

Ran in esattamente lo stesso problema di OP, provato Iconu's Big5HKSCS (raschiando da un sito HK) in convertitore UTF8 e non ha funzionato, ma questo risolto! Molte grazie davvero !! – Gary

2

potrei suggerire il mio codepage library:

var request = require('request'), codepage = require('codepage') 
request({ url: 'http://amis.afa.gov.tw/v-asp/v101r.asp',encoding:null}, function(err,  response, body) { 
    if (!err && response.statusCode == 200) { 
    var str = codepage.utils.decode(950, new Buffer(body)); 
    console.log(str); 
    } 
}); 

cede

... <p align="center"><font color="#800080">請使用瀏覽器工具列中</font><em><font 
size="4" color="#000080">[上一頁]</font></em><font color="#800080">回到前一輸入條件畫面繼續查詢</font></p>