¡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'
// ...
Bueno, ¿cuál es la codificación que usa la página? No puede simplemente lanzar un analizador utf8 en ISO, lo que sea.
Por cierto, hizo una publicación cruzada en SO: http://stackoverflow.com/questions/8332500/module-request-how-to-properly-retrieve-accented-characters
@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?
@phstc docs amigo! https://github.com/mikeal/request/blob/master/README.md
@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!
Comentario más útil
solicitud ({url: " www.example.com ", codificación: "latin1" }, función (error, respuesta, html) {
consola.log('error:', error);