Request: ¿caracteres acentuados?

Creado en 26 nov. 2011  ·  17Comentarios  ·  Fuente: request/request

¡Hola!

Estoy tratando de descartar una página web con caracteres acentuados á é ó ú ê ã etc. Intenté encoding: utf-8 , pero sigo obteniendo estos caracteres ��� en el resultado.

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

Comentario más útil

solicitud ({url: " www.example.com ", codificación: "latin1" }, función (error, respuesta, html) {
consola.log('error:', error);

Todos 17 comentarios

Bueno, ¿cuál es la codificación que usa la página? No puede simplemente lanzar un analizador utf8 en ISO, lo que sea.

@thejh la codificación de la página es iso-8859-1, también probé:

request.get({
    uri: url,
    encoding: 'iso-8859-1'
    // ...

y obtuve:

Error: Unknown encoding

Pero leo este problema https://github.com/mikeal/request/issues/27 luego 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..

Funcionó.

Eche un vistazo a la biblioteca iconv.

Vale... pero ¿sabes por qué funcionaba el binario?

Porque solo toma los datos de los búferes sin procesar. Además, la cadena todavía no es utf8, así que no lo hagas.

Pero en este caso, ¿cuál es el valor adecuado para la codificación?

Sin codificación. Tómelo como un búfer, luego métalo en iconv.

la confusión parece ser sobre "binario" y Buffer, que también es binario.

"binario" es, en su mayoría, una codificación heredada del nodo 0.1.x días donde codificamos todos los binarios en cadenas.

en node.js 0.2 obtuvimos un objeto Buffer, que es una asignación de memoria sin formato fuera del montón de v8. el objeto no es una cadena y puede contener datos binarios sin procesar que obtiene de un descriptor de archivo y enviarlos a otro descriptor de archivo sin sufrir la conversión a cadena.

en la solicitud, puede canalizar () un objeto de solicitud a cualquier flujo y todos los búferes se enviarán al flujo de destino. si todo lo que está haciendo es tomar datos binarios de una solicitud http y enviarlos a un archivo, socket o respuesta http, solo debe usar pipe().

¿Cómo puedo usar la tubería con el módulo de solicitud?

@mikeal Genial!

Necesito eliminar más de una URL en la misma solicitud HTTP (es una aplicación web) y luego enviar todos estos datos a la respuesta.

No puedo enviarlo así:

request.get({
        uri: url1
}).pipe(res);

request.get({
        uri: ur2
}).pipe(res);

¿Hay alguna otra manera de hacerlo en lugar 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

?

¿Qué flujo puedo usar con tubería?

puedes usar cualquier Stream :)

Respuestas del servidor HTTP, puede usarlo como el cuerpo de otro objeto de solicitud, puede abrir una secuencia de escritura de archivos. cualquier cosa :)

solicitud ({url: " www.example.com ", codificación: "latin1" }, función (error, respuesta, html) {
consola.log('error:', error);

@vickygill69 Gracias, tu respuesta resuelve mi problema

configurar la codificación en nulo y luego usar el búfer de respuesta con iconv funcionó para mí. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Aranir picture Aranir  ·  3Comentarios

xin7c picture xin7c  ·  3Comentarios

andornaut picture andornaut  ·  4Comentarios

mlegenhausen picture mlegenhausen  ·  4Comentarios

ghost picture ghost  ·  3Comentarios