Hai!
Saya mencoba menghapus halaman web dengan karakter beraksen á é ó dll. Saya mencoba encoding: utf-8
, tetapi saya masih mendapatkan karakter ini di hasil.
request.get({
uri: url,
encoding: 'utf-8'
// ...
Nah, apa pengkodean yang digunakan halaman itu? Anda tidak bisa begitu saja membuang parser utf8 di ISO-apa pun.
Btw, dia memposting silang ke SO: http://stackoverflow.com/questions/8332500/module-request-how-to-properly-retrieve-accented-characters
@thejh pengkodean halaman adalah iso-8859-1, saya juga sudah mencoba:
request.get({
uri: url,
encoding: 'iso-8859-1'
// ...
dan saya mendapatkan:
Error: Unknown encoding
Tapi saya membaca masalah ini https://github.com/mikeal/request/issues/27 lalu http://nodejs.org/docs/v0.6.0/api/http.html#request.setEncoding
Set the encoding for the request body. Either 'utf8' or 'binary'. Defaults to null, which means that the 'data' event will emit a Buffer object..
Itu berhasil.
Lihatlah perpustakaan iconv.
Oke ... tapi apakah Anda tahu mengapa biner bekerja?
Karena hanya mengambil data buffer mentah. Juga, string masih bukan utf8, jadi jangan lakukan itu.
Tetapi dalam kasus ini, apa nilai yang tepat untuk penyandian?
Tidak ada pengkodean. Ambil sebagai buffer, lalu masukkan ke iconv.
kebingungan tampaknya lebih dari "biner" dan Buffer, yang juga biner.
"biner", sebagian besar, adalah pengkodean warisan dari node 0.1.x hari di mana kami mengkodekan semua biner ke string.
di node.js 0.2 kita mendapatkan objek Buffer, yang merupakan alokasi mentah dari memori di luar heap v8. objek bukan string, dan dapat menyimpan data biner mentah yang Anda dapatkan dari deskriptor file dan mengirimkannya ke deskriptor file lain tanpa mengalami konversi ke string.
dalam permintaan, Anda dapat mem-pipe() objek permintaan ke aliran mana pun dan semua buffer akan dikirim ke aliran tujuan. jika yang Anda lakukan hanyalah mengambil data biner dari permintaan http dan mengirim ke file, soket, atau respons http, Anda sebaiknya menggunakan pipe().
Bagaimana saya bisa menggunakan pipa dengan modul permintaan?
@phstc dokumen kawan! https://github.com/mikeal/request/blob/master/README.md
@mikeal Luar biasa!
Saya perlu menghapus lebih dari satu URL dalam permintaan HTTP yang sama (ini adalah aplikasi web) dan kemudian mengirim semua data ini ke respons.
Saya tidak bisa mengirimnya seperti itu:
request.get({
uri: url1
}).pipe(res);
request.get({
uri: ur2
}).pipe(res);
Apakah ada cara lain untuk melakukannya selain
var writeStream = fs.createWriteStream('./output');
request.get({
uri: url1
}).pipe(writeStream);
request.get({
uri: url2
}).pipe(writeStream);
// after all pipes finish I send writeStream content to the response
?
Aliran mana yang dapat saya gunakan dengan pipa?
Anda dapat menggunakan Aliran apa pun :)
Respons Server HTTP, Anda dapat menggunakannya sebagai badan objek permintaan lain, Anda dapat membuka aliran penulisan file. apa pun :)
request({url: " www.example.com ", encoding: "latin1" }, function (error, response, html) {
console.log('kesalahan:', kesalahan);
@vickygill69 Terima kasih, jawaban Anda menyelesaikan masalah saya
mengatur penyandian ke nol dan kemudian menggunakan buffer respons dengan iconv bekerja untuk saya. Terima kasih!
Komentar yang paling membantu
request({url: " www.example.com ", encoding: "latin1" }, function (error, response, html) {
console.log('kesalahan:', kesalahan);