Request: caracteres acentuados? � � �

Criado em 26 nov. 2011  ·  17Comentários  ·  Fonte: request/request

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'
      // ...

Comentários muito úteis

request({url: " www.example.com ", codificação: "latin1" }, função (erro, resposta, html) {
console.log('erro:', erro);

Todos 17 comentários

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.

@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?

@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!

Esta página foi útil?
0 / 5 - 0 avaliações