2011-11-30 15 views
13

sto usando: Module: Request -- Simplified HTTP request method per raschiare una pagina web con caratteri accentati á é ó ú ê ã eccModulo richiesta come recuperare correttamente i caratteri accentati?

Ho già provato encoding: utf-8 senza successo. Sto ancora ottenendo questi personaggi nel risultato.

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

C'è qualche configurazione per risolverlo?

Non so se si tratta di un problema, ma I filled one for this module. Nessuna risposta ancora. :/

+0

Bene, quale codifica è la pagina Web scritta? utf8? iso-qualcosa? – thejh

+4

Ti ho risposto nel problema (https://github.com/mikeal/request/issues/118#issuecomment-2965894). Non so perché, ma ho usato 'binary' per la codifica e ha funzionato. –

+3

Anche per me, l'aggiunta di 'encoding: binary' ha funzionato benissimo – renatoargh

risposta

18

Poiché binario è obsoleto sembra un'idea meglio usare iconv e gestisce correttamente la decodifica:

var request = require("request"), iconv = require('iconv-lite'); 
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"}; 

request(requestOptions, function(error, response, body) { 
    var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1"); 
    console.log(utf8String); 
}); 

La parte importante è impostare la codifica sulla richiesta HTTP deve essere nullo encoding: null.

+0

Questo funziona benissimo, ma ho due domande. 1. perché è necessario creare un nuovo buffer per il corpo? Ho provato a usare il corpo direttamente e non ho visto alcuna differenza. Cosa mi manca? 2. Se la pagina web dice charset = utf-8, perché devo usare iconv-lite per convertirlo in ISO-8859-1? – newman

2

Specificare la codifica come utf8 non utf-8. Ecco una lista di possibili codifiche per un buffer da the Node.js documentation.

  • ascii - solo per dati ASCII a 7 bit. Questo metodo di codifica è molto veloce e rimuoverà il bit più alto se impostato.
  • utf8 - Caratteri Unicode. Molte pagine Web e altri formati di documenti utilizzano UTF-8.
  • base64 - Codifica stringa Base64.
  • 'binary - Un modo per codificare dati binari non elaborati in stringhe utilizzando solo i primi 8 bit di ciascun carattere. Questo metodo di codifica è ammortizzato e dovrebbe essere evitato a favore degli oggetti Buffer laddove possibile. Questa codifica verrà rimossa nelle future versioni di Node.
+2

utf-8 funziona come utf8. La pagina che sto scartando è iso-8859-1. L'unica codifica che ha funzionato per me è stata "binaria" ... troppo strana ... Ne abbiamo discusso qui https://github.com/mikeal/request/issues/118 –

+2

Opere binarie. grazie per il commento. :) –

+0

funziona in modo binario per me. Sto usando il modulo di richiesta, ho passato la codifica: 'binario' nelle opzioni. Grazie –

Problemi correlati