2011-11-30 7 views
13

私が使用している:Module: Request -- Simplified HTTP request methodをアクセント付き文字á é ó ú ê ãでWebページをこすりするなどモジュールがアクセント付き文字を正しく取り出す方法をリクエストしていますか?

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

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

これを修正する設定はありますか?

問題があるかどうかわかりませんが、filled one for this moduleです。まだ答えはありません。 :/

+0

よく書かれているWebページはどのようなエンコードですか? utf8? iso-something? – thejh

+4

私はこの問題(https://github.com/mikeal/request/issues/118#issuecomment-2965894)であなたに答えました。私は理由を知らないが、エンコーディングに「バイナリ」を使用していた。 –

+3

私にとっても、 'encoding:binary'を追加するだけで素晴らしい# – renatoargh

答えて

18

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

重要な部分はencoding: null NULLにHTTPリクエストにエンコーディングを設定することです。

+0

これは素晴らしいですが、私は2つの質問があります。 1.なぜあなたの体のための新しいバッファを作成する必要がありますか?私は身体を直接使ってみましたが、違いは見られませんでした。何が欠けていますか? 2. Webページにcharset = utf-8と書かれている場合、なぜiconv-liteをISO-8859-1に変換する必要がありますか? – newman

2

エンコードをutf8ではなくutf-8と指定します。ここには、the Node.js documentationのバッファの可能なエンコーディングのリストがあります。

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

utf-8はutf8として動作します。私が解凍しているページはiso-8859-1です。私のために働く唯一のエンコーディングは "バイナリ"でした...あまりにも奇妙です...私たちはそれについてここで議論しましたhttps://github.com/mikeal/request/issues/118 –

+2

バイナリ作品。コメントをいただきありがとうございます。 :) –

+0

私のためのバイナリ作品。私はリクエストモジュールを使用しています。私はオプションに 'binary'をエンコードしました。ありがとうございます –

関連する問題