web-dev-qa-db-ja.com

モジュールは、アクセント付き文字を適切に取得する方法を要求しますか? ������

私が使用しているもの: モジュール:リクエスト-簡略化されたHTTPリクエストメソッド アクセント付きの文字á é ó ú ê ãなどでウェブページをスクレイプします。

私はすでにencoding: utf-8を試しましたが、成功しませんでした。結果にはまだこの����文字が含まれています。

request.get({
    uri: url,
    encoding: 'utf-8'
    // ...

それを修正するための構成はありますか?

それが問題かどうかはわかりませんが、私は このモジュール用に1つ入力しました 。まだ答えはありません。 :/

17
Pablo Cantero

バイナリは非推奨であるため、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

25
row1

エンコーディングをutf8ではなくutf-8として指定します。 Node.jsドキュメント からのバッファの可能なエンコーディングのリストは次のとおりです。

  • ascii-7ビットの場合ASCIIデータのみ。このエンコード方法は非常に高速で、設定されている場合は上位ビットを削除します。
  • utf8- Unicode文字。多くのWebページやその他のドキュメント形式はUTF-8を使用しています。
  • base64- Base64文字列エンコーディング。
  • 'binary-各文字の最初の8ビットのみを使用して、生のバイナリデータを文字列にエンコードする方法。このエンコード方法は減価償却されており、可能な場合はBufferオブジェクトを優先して回避する必要があります。このエンコーディングは、Nodeの将来のバージョンで削除される予定です。
2
DHamrick

試してみて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

0