2017-10-27 17 views
2

は、我々は端末内に奇妙な文字を取得する:��������� ���デコード特別キリル文字

がなぜ起こっていることを次のような

const http = require("http") 
http.get("http://www.pravda.com.ua/news/2017/10/6/7157464/", res => { 
    res.on("data", e => console.log(e.toString())) 
}) 

...? curl http://www.pravda.com.ua/news/2017/10/6/7157464/を実行すると、生の疑問符(例:<title>? ? | ?? </title>)が表示されます。

ただし、ブラウザには良い文字が表示されるようです。<title>У Кахов...</title>

クライアント(Node.jsとカール対ブラウザ)が異なるコンテンツやその解釈方法を送信するサーバーですか?

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 

ブラウザはcURLの生NodeJS依頼者から離れて、それを検出し、正しく解釈するのに十分なスマートです:

答えて

2

あなたが要求するウェブサイトは、箱から出してNodeJSでサポートされていないWindows-1251エンコーディングを使用しています。だから、基本的に、あなたは、例えば、エンコーディングを変換するiconv-liteをサードパーティのモジュールが必要になります:

const http = require("http"); 
const iconv = require("iconv-lite"); 

http.get("http://www.pravda.com.ua/news/2017/10/6/7157464/", (res) => { 
    res.pipe(iconv.decodeStream("win1251")).collect((err, body) => { 
    if (err) throw err; 

    console.log(body); 
    }) 
}); 

ここでこのスニペットでは、私はすべて行いiconv-lite変換ストリームに応答配管よ汚い仕事。

関連する問題