Oi!
Estou tentando desfazer uma página da web com caracteres acentuados á é ó ú ê ã etc. Tentei encoding: utf-8
, mas ainda estou recebendo esses caracteres no resultado.
request.get({
uri: url,
encoding: 'utf-8'
// ...
Bem, qual é a codificação que a página usa? Você não pode simplesmente lançar um analisador utf8 em ISO, seja o que for.
Aliás, ele postou cruzado para SO: http://stackoverflow.com/questions/8332500/module-request-how-to-properly-retrieve-accented-characters
@thejh a codificação da página é iso-8859-1, também tentei:
request.get({
uri: url,
encoding: 'iso-8859-1'
// ...
e eu consegui:
Error: Unknown encoding
Mas eu lendo este problema https://github.com/mikeal/request/issues/27 então 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..
Funcionou.
Dê uma olhada na biblioteca iconv.
Ok... mas você sabe por que o binário funcionou?
Porque ele apenas pega os dados brutos dos buffers. Além disso, a string ainda não é utf8, então não faça isso.
Mas neste caso, qual é o valor adequado para codificação?
Sem codificação. Pegue-o como um buffer e coloque-o no iconv.
a confusão parece ser sobre "binário" e Buffer, que também é binário.
"binário" é, principalmente, uma codificação herdada do nó 0.1.x dias em que codificamos todos os binários em strings.
no node.js 0.2 temos um objeto Buffer, que é uma alocação bruta de memória fora do heap da v8. o objeto não é uma string e pode conter dados binários brutos que você obtém de um descritor de arquivo e envia para outro descritor de arquivo sem sofrer conversão para string.
em request, você pode pipe() um objeto request para qualquer stream e todos os buffers serão enviados para o stream de destino. se tudo o que você está fazendo é pegar dados binários de uma solicitação http e enviar para um arquivo, soquete ou resposta http, você deve usar pipe().
Como posso usar o pipe com o módulo de solicitação?
@phstc documentos cara! https://github.com/mikeal/request/blob/master/README.md
@mikeal Incrível!
Preciso descartar mais de uma URL na mesma solicitação HTTP (é um webapp) e enviar todos esses dados para a resposta.
Não consigo enviar assim:
request.get({
uri: url1
}).pipe(res);
request.get({
uri: ur2
}).pipe(res);
Existe alguma outra maneira de fazer isso em vez de
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
?
Qual fluxo posso usar com pipe?
você pode usar qualquer Stream :)
Respostas do servidor HTTP, você pode usá-lo como o corpo de outro objeto de solicitação, você pode abrir um fluxo de gravação de arquivo. nada :)
request({url: " www.example.com ", codificação: "latin1" }, função (erro, resposta, html) {
console.log('erro:', erro);
@vickygill69 Obrigado, sua resposta resolve meu problema
definir a codificação como nula e, em seguida, usar o buffer de resposta com iconv funcionou para mim. Obrigado!
Comentários muito úteis
request({url: " www.example.com ", codificação: "latin1" }, função (erro, resposta, html) {
console.log('erro:', erro);