私が使用しているもの: モジュール:リクエスト-簡略化されたHTTPリクエストメソッド アクセント付きの文字á é ó ú ê ã
などでウェブページをスクレイプします。
私はすでにencoding: utf-8
を試しましたが、成功しませんでした。結果にはまだこの����文字が含まれています。
request.get({
uri: url,
encoding: 'utf-8'
// ...
それを修正するための構成はありますか?
それが問題かどうかはわかりませんが、私は このモジュール用に1つ入力しました 。まだ答えはありません。 :/
バイナリは非推奨であるため、iconvを使用して、デコードを正しく処理することをお勧めします。
var request = require("request"), iconv = require('iconv-lite');
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"};
request(requestOptions, function(error, response, body) {
var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1");
console.log(utf8String);
});
重要な部分は、HTTPリクエストのエンコーディングをnullに設定することですencoding: null
。
エンコーディングをutf8
ではなくutf-8
として指定します。 Node.jsドキュメント からのバッファの可能なエンコーディングのリストは次のとおりです。
ascii
-7ビットの場合ASCIIデータのみ。このエンコード方法は非常に高速で、設定されている場合は上位ビットを削除します。utf8
- Unicode文字。多くのWebページやその他のドキュメント形式はUTF-8を使用しています。base64
- Base64文字列エンコーディング。'binary
-各文字の最初の8ビットのみを使用して、生のバイナリデータを文字列にエンコードする方法。このエンコード方法は減価償却されており、可能な場合はBufferオブジェクトを優先して回避する必要があります。このエンコーディングは、Nodeの将来のバージョンで削除される予定です。試してみてOK(Shift_JIS):
var concat = require('concat-stream'),
Iconv = require('iconv').Iconv,
request = require('request');
var conv = new Iconv('Shift_JIS', 'utf8'),
req = request('http://www.alc.co.jp/');
req.pipe(conv);
req.on('error', function() {
console.log('an error occurred');
});
conv.pipe(concat(function(body) {
console.log(body.toString());
}));
https://github.com/request/request/issues/1080#issuecomment-56172161