2013-10-24 6 views
5

私はNode.jsを初めて使用しています。リクエストモデルを使用してウェブサイトをスクラップしようとしています。エンコードに問題があります。エンコーディングとしてBIG5を使用して、私は次のコードでUTF-8にそれを回すことを望んだ:ノードリクエストを使用してウェブサイトをスクラップしながらBig5をエンコードする

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()); 

私は、あなたの参考のためになるような問題は、廃棄の過程で何らかの間違っに起因する可能性があることを疑います解消のコード:

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); 
}); 

本当にありがとうございます。

EDIT:これは返すべきものである

<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> 

エラーに、より具体的には、次はどのようなコードに戻ります

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

I iconvの代わりにiconv-liteを使用して、関数呼び出しを次のものに置き換えようとしました:

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

のみ取得するには:

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

実際にデータがbig5でエンコードされていることを確認しましたか? – SheetJS

+0

Nirkに:もう一度チェックしました。はい、ページはbig5でエンコードされています。 – muyueh

+0

「私は問題を抱えています」とは、あなたが直面している正確な問題を記述する。あなたのコードの結果は何ですか?何かエラーが出ますか? – user568109

答えて

6

私はUTF8にBIG5をデコードするiconv-liteを使用しています。

encoding:nullには、requestが生のエンコードページを返すように設定する必要があります。

これはサンプルコードです。

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); 
    } 
}); 

と戻り、私はRedHat EL 6.4iconv-lite 0.2.11node.js 0.10.20を使用

<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> 

で、request 2.27.0

+0

多くのありがとう:) – muyueh

+0

OPとまったく同じ問題に遭遇し、IconvのBig5HKSCS(HKサイトからのスクレイピング)をUTF8コンバータに試してもうまくいかなかったが、これを修正した!確かに多くのありがとう! – Gary

2

私は私の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); 
    } 
}); 

利回り

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